0
0
(1)使人们更容易探讨和理解协议的许多细节 (2)创建更好的集成环境 (3)把复杂的网络划分成更为容易管理的层,减少复杂性 (4)较低层为较高层提供服务
第一次握手:客户端将同部位SYN置为1,同时选择一个初始序号seq=x,向服务器发送连接请求报文段,然后进入SYN-SEND状态,等待服务器确认。 第二次握手:服务器接收到连接请求报文段后,若同意连接,则向客户端发送确认。在确认报文段中将SYN为和ACK位都置为1,确认号ack为x+1,同时也为自己选择一个初始序号seq=y。然后进入SYN-RCVD(同步收到)状态。 第三次握手:客户端收到确认后,检查收到的报文段是否正确,正确则向服务器发出确认信息,然后进ESTABLISHED(已建立连接状态)
第一次挥手:客户端发送一个FIN(终止控制位)的报文段来关闭客户端到服务器的数据传送,然后进入FIN-WAIT-1状态。 第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认号为收到序号+1。然后进入CLOSE-WAIT状态。 此时TCP连接处于半连接状态,客户端已经没有要发送的数据了,但是如果服务器发送数据,客户端仍要接收。 第三次挥手:服务器发送一个FIN,来关闭服务器到客户端的数据发送,服务器进入LAST-ACK(最后确认)状态。 第四次挥手:客户端收到FIN后,进入TIME-WAIT状态,接着发送一个ACK给服务器,确认号为收到的序号加1,服务器进入CLOSE状态。
(1)将数据截断为合理的长度 (2)超时重发 (3)对于受到的请求,给出确认响应 (4)检验出包有错,丢弃报文段,不给出响应 (5)对于重复数据,能够丢弃 (6)对失序的数据进行重新排序,然后才交给应用层 (7)TCP可以进行流量控制,放着较快主机致使较慢主机的缓冲区溢出
不行,三次握手可以防止已失效的请求报文突然又传送到了服务器。客户端可能会因为网络阻塞等原因发送的多个请求报文,如果只是两次握手,就会造成资源的浪费。
(1)双方的序列号 (2)窗口协商 (3)最大的报文段长度
为了实现TCP连接的可靠释放。(1)为了保证客户端发送的最后一个ACK报文段能到达服务器。(2)为了使旧的重复数据包在网络中因为过期而消失。
在高并发短连接的TCP服务器上,当服务器处理完请求后主动请求关闭连接,这样服务器上会有大量的连接处于TIME_WAIT状态,服务器维护每一个连接需要一个socket,也就是每个连接会占用一个文件描述符,而文件描述符的使用是有上限的,如果持续高并发,会导致一些连接失败。 【可设置套接字选项为SO_REUSEADDR,该选项的意思是,告诉操作系统,如果端口忙,但占用该端口TCP连接处于TIME_WAIT状态,并且套接字选项为SO_REUSEADDR,则该端口可被重用。】
TCP:(1)面向连接 (2)面向字节流 (3)每一条TCP只能是一对一的 (4)提供可靠的交付服务 (5)提供全双工服务 UDP:(1)无连接的 (2)面向报文(应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。) (3)可以是一对多、多对一、多对多、一对一的通信 (4)首部开销小(只有:源端口、目的端口、长度、检验和) (5)尽最大努力交付 (6)没有拥塞控制
UDP是无连接的,所以不会持续占用服务器的链接资源,由于不需要双方持续在线,所以server不用维护巨量的并发连接,节省了系统资源; 因为没有重传确认,虽然到达的数据可能会有所缺失,但在不影响使用的情况下,能更高效的利用网络带宽。
(1)首先,每一个主机都会在自己的ARP缓冲区建立一个ARP列表,以表示IP地址和MAC地址的对应关系。 (2)源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP请求分组,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。 (3)当本网络的所有主机收到该ARP请求分组时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从请求分组中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应分组中,告诉源主机它想要找的MAC地址。 (4)源主机收到ARP响应分组后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应分组,表示ARP查询失败。 【广播发送ARP请求,单播发送ARP响应。】