目录
五. 如果TCP三次握手的最后一次握手中出现丢包的情况会怎么样?
一.TCP/IP介绍
NCP是网络核心协议(NCP)管理对 NetWare 服务器资源的访问。NCP 向 NetWare 文件共享协议(即NFSP:NetWare File Sharing Protocol)发送过程调用消息,处理 NetWare 文件和打印资源请求。 NCP 是用于 NetWare 服务器和客户机之间传输信息的主要协议。
NCP 服务包括:文件访问、文件锁定(file locking)、安全性、资源分配跟踪(tracking of resource allocation)、事件通知(event notification)、与其它服务器同步、连接和通信、打印服务,以及队列和网络管理。
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
二.TCP/IP分层
共定义了四层,和OSI参考模型的分层有对应的关系,随着系统的不断升级,我们现在主要是 划分五层,
TCP/IP通信过程
TCP/IP和OSI模型的比较
相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
不同点
OSI是先有模型;TCP/IP是先有协议,后有模型
OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
层次数量不同
三.TCP的特性
1.特点
1.工作在传输层 2.面向连接协议 3.全双工协议 4.半关闭 5.错误检查 6. 6.将数据打包成段,排序 7.确认机制 8.数据恢复,重传 9.流量控制,滑动窗口
系统当中 每打开一个 进程 会 配 pid (系统中的编号,方便管理),其次会分配一个端口号
两个端口号: 1.pid 系统每个开启一个进程,hi自动分配一个pid号给这个进程,方便系统管理 所有 的系统都是从1...............
端口号: 来区别两个系统之间的进程
服务端:端口号约定不会轻易改变(iana组织 前1024) 客户端;随意生成
2、TCP报文的头部格式及状态的查看
其中TCP报文的头部格式如下图所示。
端口、目标端口:是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535)
序列号:表示本报文段所发送数据的第一个字节的编号。由于序列号由32位表示,所以每2^32个 字节,就会出现序列号回绕,再次从0 开始 无限循环
确认号:(ack)表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉 发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传 输是否有问题?
数据偏移/首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选 项部分,需要指定这个TCP报文段到底有多长。该字段的单位是32位(即4个字节为计算单 位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
控制位
URG紧急位 ACK确定位(建立连接) PSH急切位 RST重置位
SYN同步位(请求连接) FIN断开位(断开连接)
四.tcp为什么是3次握手不是2次或者4次?
1)不用两次握手
如果在第一次握手的过程中,客户端 向服务端发送了SYN报文(Num=90),但由于网络原因 使得报文阻塞,在一段时间没有收到服务端的响应报文后,客户端会再次发送SYN报文(Num=100)。假如此时,之前发送的被阻塞的报文(Num=90)恰好到达了服务端,此时服务 端会进行第二次握手,即发送SYN+ACK报文给客户端。试想一下,如果两次握手即可建立连接,在这种情况下,客户端和服务端将会基于旧的报文建立连接,此时可能会造成错误。
而在三次握手的机制下,客户端就可以根据确认应答号判断所接受到的ACK+SYN报文是不是历 史连接,并根据是否为历史连接做出不同的应答。
如果是历史连接,则第三次握⼿发送的报⽂是 RST 报⽂,以此中⽌历史连接;
如果不是历史连接,则第三次发送的报⽂是 ACK 报⽂,通信双⽅就会成功建⽴连接;
这样就可以避免建立历史连接了,这是两次握手没法做到的。
还有一个原因,那就是客户端和服务端要同步双方的初始序列号
第二次握手中,服务端在确认应答号中将客户端在第一次握手中生成的随机序列号+1,表示对 客 户端SYN报文的成功接收,那么客户端也同样需要一个握手过程表示对服务端报文的成功接 收, 因此,这就是第三次握手的必要性。
2)不用四次握手
其实通过刚才的过程我们可以看到,三次握手已经可以建立可靠的TCP连接了,因此,实在是 没有必要再增加一次握手过程,白白增加资源的浪费。
五. 如果TCP三次握手的最后一次握手中出现丢包的情况会怎么 样?
首先,第三次握手的ACK报文发出之后,客户端就进入了established状态,即认为连接建立成 功。但服务端由于没有收到ACK报文,则不会成功建立连接。但服务端会有定时器发送第二步 SYN+ACK数据包的功能,此操作可使得客户端有机会再次发 送ACK包,如果客户端再次发送 ACK包成功,建立连接。 如果还是失败,服务器会启动有超时(大概64s)设置,超时之后会给客户端发RTS报文,进入 CLOSED状态,防止SYN洪泛攻击,这个时候客户端应该也会关闭连接。