Java的TCP/IP协议的浅显认知

一. 些许协议的理解
////注意TCP和UDP

AF_UNIX 只能本机内进行数据传输
AF_INET 都可以 但是本机内传输不如AF_UNIX 其对CPU消耗高,对本机内数据传输资源占有远大于AF_UNIX 所以多用来跨机通信
所以 UNIX域 也被称为 LOCAL域
AF 和 PF 无差别
////还有 INET6 为IPv6 协议 (还在了解)


客户端与服务端的连接本质上是在协议基础上进行数据的读取监听发送,而传输的基本通道则是建立于TCP/IP协议,进行多次的请求
所以还需要认真的学习I/O数据传输,建议在粗略的看完TCP/IP协议后回去复习

其中IP连接并不安全,TCP 传输的是两端的端口号,IP传输的是两端的IP地址
而两组端口号和两组IP地址能确定一个唯一的连接,一个端口号和一个IP地址也被称为一个 socket插口
服务器端插口为 ServerSocket() 客户端插口为 Socket()

以下为连接前后以及数据传输所需要的基本方法和方法的使用,多数基于java.net包和java.io包

二.连接前后发生的事情

连接时的粗略过程
1 服务器端先进行socket的初始化,接着进行accept的阻塞阶段等待客户端的连接请求
2 客户端发送一个带有syn包的连接请求,其中带有一段IP数据报: 由ip地址和TCP端口报组成,其中TCP端口报为一个TCP首部也就是端口号和数据段组成
3 然后服务器接收到syn包后发送一个ack确认包和一个syn+1的请求包,请求发送数据
4 客户端在接受ack和syn+1包后向服务器端发送ack+1确认包
5 接着双方开始传输数据
2 3 4 也被称为 TCP/IP的三次握手 也就是数据传输通道的建成


////在接通通道之后 进行I/O数据流的交互 以下为不知道对不对的认知 亟待以后更改
////数据在传输时以把数据的ASCII码转化为二进制发送给对方内存开辟出的缓冲区,然后再从缓冲区读取改成ASCII码,然后在磁盘中显示为UNICODE
////而数据传输时是不会管你传的是什么的,在传输时只是传 在传到之后由客户端自己从缓冲区读取数据


关闭连接时的粗略过程
1 主动关闭方需要发送一个FIN包给另一方
1.1 此时称为半关闭状态,因此若另一方给主动关闭方发送数据,主动关闭方还是要接受,因为对于主动方来说它还需要接受另一方的关闭连接ACK确认包的数据
1.2 这也是为什么关闭连接时需要四次挥手:被关闭方收到FIN包后先发一个ACK包告诉主动关闭方已经得到了关闭的指令,可是被关闭方可能还有一些数据需要
传输,因此需要分出第二步单独发一个FIN+1包,也就是中间需要考虑把未输送完全的数据包接着输送完毕之后才能发FIN+1包
2 被关闭方接收到FIN包后则会发送一个ACK确认包
3 被关闭方发送一个FIN+1包告诉主动关闭方我要关闭连接了
4 主动关闭方发送一个ACK+1确认包
5 连接关闭
1 2 3 4 被称为TCP/IP的四次挥手 也就是数据传输通道的关闭

 


在数据传输完毕之后会有一次断开连接的过程
其中有四个数据包的发送过程,也被称为四次挥手也就是再见断开连接

 

(等待进一步完善...)

posted @ 2020-07-20 08:35  Lzzycola  阅读(168)  评论(0编辑  收藏  举报