TCP/IP三层通信机制

发布于:2022-12-27 ⋅ 阅读:(439) ⋅ 点赞:(0)

目录

一.TCP/IP介绍

二.TCP/IP分层

三.TCP的特性

四.tcp为什么是3次握手不是2次或者4次?

五. 如果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洪泛攻击,这个时候客户端应该也会关闭连接。
 


 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到