潍坊在线网站建设,现在流行用什么做网站,硬件开发环境,手机上怎么做网站创业传输层的数据结构是什么#xff1f;
就是在问他的协议格式#xff1a;UDPTCP
2.1.1三次握手
通信前#xff0c;要先建立连接#xff0c;确保双方都是在线#xff0c;具有数据收发的能力。 2.1.2四次挥手
通信结束后#xff0c;会有一个断开连接的过程#xff0…传输层的数据结构是什么
就是在问他的协议格式UDPTCP
2.1.1三次握手
通信前要先建立连接确保双方都是在线具有数据收发的能力。 2.1.2四次挥手
通信结束后会有一个断开连接的过程避免出现意外。 FIN请求的功能 只能表示不再给对方发送数据不代表不接受数据
CLOSE_WAIT等待关闭对方发送了FIN包已经不再给自己发送数据上层如果这时候还在继续recv则会读完缓冲区数据后不再阻塞而是返回0.这种情况下就是等待上层针对这种情况的处理。
为什么握手是三次
握手三次俩次不安全四次没必要
1.通信前要先建立连接确保双方都是在线具有数据收发的能力。因此都要SYN
2.俩次不安全
有可能SYN会延迟到达与重发的SYN形成冲突三次有状态要求 防止恶意攻击比如客户端发送SYN后就直接退出 3.四次没必要没必要发送俩次报文在一次回复中将对应比特位置置1即可
2.1.3.2 挥手是四次
FIN请求只能表示主动关闭方不再发送数据不代表不再接收数据。因此被动关闭方收到FIN包并进行确认后还有可能会继续发送数据。等待上层不再发送数据了也要关闭套接字了才会发送FIN包。
因此挥手没有合并为三次。
2.1.3.3 三次握手失败俩端如何处理
客户端发送第一次握手请求失败了客户端会重传请求SYN。 第二次握手失败服务端回复的ACK SYN丢失客户端会重传服务端在等待对方ACK回复超时后给客户端发送一个RST报文然后释放资源。 第三次握手失败服务器超时回复RST然后释放资源。
2.1.3.4 一台主机出现了大量的CLOSE_WAIT状态连接是什么原因
只有收到FIN请求并进行了确认回复的连接会进入CLOSE_WAIT状态 一直处于CLOSE_WAIT而没有进入下一个状态是因为上层没有进行关闭套接字操作也就是没有发送FIN所以没有进入下一步 因此原因就是代码中没有针对断开连接的套接字进行关闭处理
2.1.3.5 TIME_WAIT状态有什么用为什么不直接关闭套接字释放资源
TIME_WAIT状态是主动关闭方在发送最后一次ACK后进入的状态 如果没有TIME_WAIT主动关闭方直接释放套接字资源有可能出现新启动的套接字使用了与之前相同的地址信息 而上次通信可能最后一次ACK丢失一旦丢失被动关闭方会重传FIN 就会导致上一次通信因为最后一次ACK丢失而遗留问题重传FIN对新连接造成影响 因此不能直接释放资源需要等待俩个MSL时间针对有可能存在的FIN重传进行处理并保证上一次通信的所有数据都消失在网络中。
MSL报文最大生命周期一个报文在网络中最大能存在的时间。默认60s
2.1.3.6 一台主机上出现了大量TIME_WAIT状态连接是什么原因怎么处理
TIME_WAIT是状态是主动关闭方在发送最后一次ACK后进入的状态等待一段时间是为了处理有可能因为FIN丢失导致的FIN重传的处理 因此一台主机出现大量的TIME_WAIT连接是因为主机上大量的主动关闭了连接常见于爬虫服务器 TIME_WAIT等待时间是可以配置的可以将时间缩短 有个套接字选项叫做地址重用setsockopt();
tcp连接管理中的保活机制
连接断开有个信息recv会返回0send会触发异常SIGPIPE
tcp通信中如果客户端和服务端的通信频率并不高中间突然断网了没有四次挥手的机会如果俩端通信频率很低可能需要很久才能发现。
在通信中客户端与服务器若长时间无通信默认7200s则tcp服务器会自动向客户端发送保活探测心跳包要求对方进行响应默认每隔75s若连续多次都没有收到响应默认9次则认为断开连接。
这些数据都可配置。甚至可以用套接字选项设置。
通常网络通信程序在初始化阶段都会自定义SIGPIPE信号。