文章目录
-
- 网络基础
- TCP/UDP
-
- TCP协议的3次握手与4次挥手过程详解
- TCP三次握手过程,为什么需要三次?
- 为什么TCP建立连接需要三次握手,而断开连接需要四次挥手?
- TIME_WAIT的意义,为什么等于2MSL?
- TCP头部校验的原理,安全吗,可以仿造吗
- TCP、UDP的区别?服务器和客户端建立的过程?
- UDP编程的服务器端一般步骤
- UDP编程的客户端一般步骤是
- TCP编程的服务器端一般步骤是
- TCP编程的客户端一般步骤是
- 长连接与短连接
- socket中的close是一次就关闭的吗?半关闭状态是怎么产生的?
- 解决TIME_WAIT过多造成的问题
- 解决TIME_WAIT过多造成的问题
- TCP拥塞控制和流量控制
- TCP流量控制,采用滑动窗口会用什么问题?
- 拥塞控制和流量控制的区别?
- TCP怎么保证可靠性?
- TCP滑动窗口协议
- TCPUDP 常见的错误码
- http协议与TCP协议的联系
- http
- socket
网络基础
OSI七层网络模型
OSI为(Open System interconnect)开放系统互连参考模型的缩写,自上而下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
《OSI七层模型与TCP/IP五层模型》
TCP/UDP
TCP协议的3次握手与4次挥手过程详解
TCP三次握手过程,为什么需要三次?
谢希仁版《计算机网络》中的例子:
"已失效的连接请求报文段”的产生在这样一种情况下:
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。
本来这是一个早已失效的报文段,但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。
于是就向client发出确认报文段,同意建立连接。
假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。
由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。
这样,server的很多资源就白白浪费掉了。
采用“三次握手”的办法可以防止上述现象发生。
例如刚才那种情况,client不会向server的确认发出确认,server由于收不到确认,就知道client并没有要求建立连接。”
这个例子很清晰的阐释了“三次握手”对于建立可靠连接的意义。
其实就是为了保护服务器资源
简单来讲:A:喂,听到吗? B:能听到,你呢?A:…B:…
需要三次的原因:为了保护服务器资源,防止已失效的报文段出现在本连接中。
为什么TCP建立连接需要三次握手,而断开连接需要四次挥手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
TIME_WAIT的意义,为什么等于2MSL?
因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时候,来自连接先前化身的重复分组已经在网络中消逝。
MSL是最长报文段寿命,设置的目的是:
保证A发送的最后一个ACK能够到达B
防止已失效的报文段出现在新连接中
等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。
MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
TCP头部校验的原理,安全吗,可以仿造吗
TCP校验和是一个端到端的校验和,由