TCP的三次握手和四次挥手

简述TCP/IP?
1)TCP/IP四层模型,各层的结构、功能、协议、作用
        应用层 : 提供应用层服务,文件传输(FTP), 电子邮件(SMTP),HTTP(超文本传输协议),DNS(域名系统),telnet(远程登陆服务)
        传输层: TCP 、 UDP
        网络层: IP, ICMP(用于在IP主机、路由器之间传递控制消息) ,OSPF(用于网际协议(IP)网络的链路状态路由协议,用于IP选路)
        物理链路层:ARP(地址解析协议,根据IP地址获得MAC地址)

2)TCP和UDP
        TCP是传输控制协议,提供的是面向连接的、可靠的字节流服务。实际的数据传输之前,服务器和客户端要进行三次握手,会话结束后结束连接。
        UDP是用户数据报协议,是无连接的,传输速度很快,可以用于实时视频。
        TCP保证数据按时到达,提供流量控制和拥塞控制,在网络拥堵的时候会减慢发送字节数,而UDP不管网络是否拥堵。
        TCP是一对一服务(是连接的),而UDP可以一对一、一对多、多对多。

3)TCP拥塞控制
        拥塞控制就是为了防止过多的数据注入到网络中,这样使网络中的路由器不至于过载。
        拥塞控制:慢开始,拥塞避免,快重传,快恢复。

4)TCP的三次握手和四次挥手
SYN:请求建立连接,FIN:请求断开连接,ACK:确认是否有效, seq:序列号, ack:确认号

        1--三次握手

        所谓三次握手,是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

        三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。

        (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

        (2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

        (3) 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
 

        2--四次挥手

        TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

        TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

        (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。

        (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

        (3) 服务器关闭客户端的连接,发送一个FIN给客户端。

        (4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1

5)为什么是三次握手而不是两次握手?
        因为如果客户端第一次发送的SYN报文因为网络问题而迟迟没有到达服务端,此时客户端会因为超时而重新发送一个新的SYN报文,此时上一个SYN报文在客户端就会失效,如果这里只采用两次握手,会因为客户端第二次发送SYN后,第一次发送的SYN又成功到达服务端,这时就会建立两个连接,产生问题。

6)为什么连接的时候是三次握手,关闭的时候却是四次握手?
        因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值