java提高之网络

1. 三次握手和四次挥手

1. 三次握手建立连接

1. 前置知识

  • ACK Acknowledge Character 确认字符
  • SYN synchronize 同步信号,发出的连接信号
  • FIN finish 结束信号(不确定,大致意思吧,以后再修正)

2. 概念

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

2. 四次握手断开连接

概念

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当 然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

2. OSI七层协议

参考 https://baijiahao.baidu.com/s?id=1623342279899809678&wfr=spider&for=pc
7-应用层、6-表示层、5-会话层、4-传输层、3-网络层、2-数据链路层、1-物理层

历史演进

  • 两个硬件之间如何进行通信,需要物理层,物理线路,比特为单位。
  • 时代发展,有了无线通信,需要保证不同介质传输数据的正确性,数据链路层
  • 需要保证大文件数据的准确性,数据封装为包,传输层
  • 终端越来越多,如何快速找到对方,网络层,路由器,IP,TCP/IP协议
  • 用户体验不好,希望自动收发包,自动寻址,会话层,建立和管理应用程序之间的通信
  • 不同操作系统,语法不同,表示层,解决不同系统之间的通信语法问题
  • 可以愉快的编写应用程序实现需求,应用层

猜你喜欢

转载自blog.csdn.net/wjl31802/article/details/91961687