zoukankan      html  css  js  c++  java
  • 计算机网络 TCP三次握手建立连接、四次挥手关闭连接

    TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的,可靠的,基于字节流的传输层协议。

    1、报文格式

    1)IP首部和TCP首部中的源地址+源端口,以及目的地址+目的端口,唯一确定一个TCP连接。

    2)序号(4B):报文第一个字节的编号。可靠性的主要保障。

    3)确认号(4B):期待收到的下一个字节编号,用于确认该编号之前的字节都已经收到了。

    4)标志位:ACK(1b,为1表示确认号有效);SYN(1b,为1表示建立连接的请求和应答);

    5)检验和(2B)

    6)滑动窗口(2B)

    2、三次握手建立连接 

    3、四次挥手关闭连接

    4、建立连接为什么需要三次握手,两次行不行? 

    不行。如果没有最后一次握手,Server不知道Client有没有收到自己的SYN包。

    追问:如果Client的ACK,Server没有收到呢?

    Server会重传SYN包,知道收到ACK。

    5、关闭连接为什么需要四次握手,三次行不行?

    不行。因为当Server收到Client发来的FIN包时,可能自己想发给Client的数据还没发完,只能先回一个ACK包,告知Client:你的FIN包我收到了。 并进入CLOSE_WAIT状态。Server的数据发完了,才能向Client发FIN包,并进入LAST_ACK状态。

    6、服务器出现大量CLOSE_WAIT连接,可能的原因是什么?

    Server没调用close来关闭socket。 

    7、为什么TIME_WAIT状态需要2MSL(Maximum Segment Lifetime,报文的最大生存时间)?

    为了确保Server收到了Client的ACK。如果Server没有收到Client的ACK,会超时重传FIN包。2MSL=Client的ACK+Server的FIN。 

    8、和UDP(User Datagram Protocol,用户数据报协议)的区别?

    UDP无连接,不可靠,基于数据报,不会对数据进行拆分和拼接。适用于对通信质量要求不高,允许丢包,例如音视频;对通信速度要求很高,例如IM(即时通信,QQ)。 

    9、UDP是无连接的,调用connect的作用是什么?

    指定目的地址和目的端口,否则需要在sendto和recvfrom中指定。 

    参考链接:

    https://www.zhihu.com/question/24853633

  • 相关阅读:
    Linux菜鸟级重点
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
    搭建PHP开发环境
    Struts+Hibernate+Spring实现用户登录功能
    Struts2整合Hibernate3实现用户登录功能
    决战JS(二)
    决战JS
    lightoj-1098
    lightoj-1072
    lightoj-1094 Farthest Nodes in a Tree(求树的直径)
  • 原文地址:https://www.cnblogs.com/yangwenhuan/p/10350735.html
Copyright © 2011-2022 走看看