博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP/IP的简介
阅读量:6415 次
发布时间:2019-06-23

本文共 3280 字,大约阅读时间需要 10 分钟。

关于协议

简单来说,协议就是计算机与计算机之前通过网络实现通信事先达成的一种“约定”。这种约定,使不同设备,不同系统之间只有遵循相同的协议才能进行通信。互联网中常用的协议有:IP、TCP、UDP、HTTP,局域网:IPX/SPX等

关于TCP/IP

TCP/IP是一种网络体系结构,也可以叫做“TCP/IP”协议族,它不只是TCP和IP,是IP、TCP、HTTP、FTP等协议的集合(基于TCP/UDP、IP的协议)。

TCP/IP的参考模型

和OSI参考模型联系:

  • 物理层

物理层是负责数据传输的硬件层,例如:以太网、电话线等物理设备。主要功能是把电压的高低转化成0、1(比特流)。

  • 数据链路层

负责把比特流转换成数据帧传输,例如驱动程序担当是操作系统和硬件的桥梁作用。

  • 网络层

负责网络通信中的寻址和路由的选择,将目标数据传送到目标地址。

  1. IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。使用IP地址作为主机的标识;
  2. ICMP在IP数据包发送途中发生异常无法到达对端的目标地址是,会向发送端发送一个异常的通知的协议。
  3. ARP是通过IP地址解析出物理地址(MAC地址)的协议。
  • 传输层

主要功能是实现程序之前的通信,运用端口号来区分单个设备多个程序之间的通信。期间用到的协议TCP、UDP。

  • 应用层

为应用程序提供服务并规定应用程序中通信相关细节。包括文件传输、电子邮件、远程登录等协议。

传输层的协议

在网络通信过程中,源IP地址和目标IP地址两个因素是识别两端主机。但是,传输层的作用是实现单个设备多个程序之间的通信,因此加入了源端口号,协议号,目标端口号。通过这五个因素“源IP地址、目标IP地址、源端口号、目标端口号、协议号”来确认是否同一个通信。

  • UDP

UDP是一种面向无连接的传输层协议,不会关注数据是否到达对端。多用在数据少或多播、广播通信、视频通信等多媒体领域

  1. UDP的首部

  • 源端口号:表示发送的端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0,可用于不需要返回的通信中。

  • 目标端口号:表示接收端口号,字段长16位。

  • 包长度: UDP 首部的长度和 UDP 数据长度之和(单位位字节 )

  • 检验和:用来判断数据在传输过程中是否损坏,除了检验UDP首部的源端口号、目标端口号,还包括源IP地址、目标IP地址、协议号(这三个也叫“UDP伪首部”)。原因是识别一个通信必须包括这5大因素,假如UDP伪首部出来问题,极有可能应该收包的应用收不到包。

  • TCP

TCP是一种面向连接的传输层协议,要连接和断开经过“三次握手,四次挥手”,可以保证数据传输的可达,具备可靠性。能处理丢包、传输数据顺序乱的问题,还有通过流控制有效地利用宽度,缓解网络拥堵的作用。

  1. TCP的首部

  • 源端口号:表示发送的端口号,字段长16位。

  • 目标端口号:表示接收端口号,字段长16位。

  • 序列号:指凡事数据的位置,字段长32位,每发送一次数据就累加一次该数据字节数的大小。序列号是在建立连接时由计算机随机生成的随机数作为初始值,通过SYN包传给接收端。

  • 确认应答号:它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s,发送数据的长度为 l,那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后,可以认为这个位置以前所有的数据都已被正常接收。

  • 数据偏移:该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,也就是TCP首部的长度。该字段的长度单位为 4 字节,如果没有可选字段,那么这里的值就是 5,表示 TCP 首部的长度为 20 字节。

  • 保留:该字段主要为了以后扩展是使用,其长度位4位。一般设置位0,但即使收到的包的在该字段不为0,此包也不会被丢弃。

  • 控制位:改字段长度为 8 比特,分别有 8 个控制标志。依次是 CWR,ECE,URG,ACK,PSH,RST,SYN 和 FIN。

    • CWR(Congestion Window Reduced):CWR与ECE都用于IP地址首部的ECN字段。ECE标志为1是,则通知对方已将拥堵窗口缩小。
    • ECE(ECN-Echo):为1时,通知对方,从对方到这边有网络拥塞的情况。
    • URG(Urgent Flag):为1时,表示包中有需要紧急处理的数据。
    • ACK(Acknowledgement Flag): 为1时,确认应答的字段变为有效。TCP规定处理最初建立连接是的SYN包之外该为必须设置为1。
    • PSH(Push Flag):为1时,表示需要将收到的数据立刻传给上层应用协议。PSH为 0是则不用立即传是先进行缓存。
    • RST(Reset Flag):为1时,表示TCP连接中出现一次必须强制断开连接。例如,一个没有被使用的端口即使发来连接请求,也无法进行通信,这时可以返回一个RET为1的包,端口连接。
    • SYN(Synchronize Flag):用于建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定,建立连接的 双方,序列号和趣儿应答号要保持同步。
    • FIN(Fin Flag):为1时,表示今后不会再有数据发送,希望断开连接。通信双方的主机之间通过发送FIN位置为1的TCP段,且每个主机对对方的FIN包进行确认应答以后就可以断开连接。不过,不用马上作出应答,而是等缓存区的所有数据发送完成后再发确认应答。
  • 窗口大小:该字段长16位,用于通知从相同TCP首部确认应答号所指位置开始能够接收的数据到小。有一种情况,窗口大小为0时,则表示发送窗口探测,以了解最新的窗口大小。但这个数据必须为1字节。

  • 检验和:TCP的校验和与UDP相似,区别在于TCP的校验和无法关闭。

  • 紧急指针:该字段为16位,只有在URG控制位为1是才有效。

  • 选项:该字段用于提高TCP的传输性能。

  1. TCP三次握手

TCP握手一般由客户端发起,步骤如下:

  1. 第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里,并进入SYN_SEND状态,等待服务器确认.
  2. 第二次握手: 服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为X+1,服务器进入SYN_RECV状态
  3. 第三次握手. 客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方

在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.

为什么是三次握手?

因为TCP的可靠的数据传输,且是全双工通信,在双方进行数据传输前,必须确认双方都可以接收数据。例如:如果是二次握手就建立,当服务端给客户端发送数据时,由于没有第三次的ACK握手,服务端就不确定客户端能否接收到数据同样给客户端发送数据,就会造成资源的浪费。

  1. 四次挥手

  1. 客户端主动关闭,向服务端发送FIN包,包首部FIN=1,seq(序列号) = u,进入FIN-WAIT状态。
  2. 服务端收到客户端的FIN包后,向客服端发送一个ACK包,包首部ACK=1,seq = v,ack = u+1,进入等待关闭状态
  3. 等服务端的缓存数据全部发送完是向客服端发送一个FIN包,包首部FIN=1,ACK=1,seq=w,ack=u+1,进入Last-Ack状态,等待客户端的回复再关闭。
  4. 客服端收到服务端的FIN包后,返回一个ACK包,包的首部ACK=1,seq=u+1,ack = w+1,服务端收到ACK后就关闭TCP连接,而客户端进入等待关闭,等待2MSL的时间后没有收到服务端的数据,再关闭连接

转载地址:http://fkkra.baihongyu.com/

你可能感兴趣的文章
Windows脚本初探之PowerShell流程控制for和foreach
查看>>
LVM 管理之一:扩容VG/LV
查看>>
JSP自学整理1——jsp介绍
查看>>
50个常用的sql语句
查看>>
批处理拷贝文件和文件夹
查看>>
交换机IOS失效的恢复详解
查看>>
Windows 7删除用户配置文件后使用临时配置文件
查看>>
JavaScript系列:ECMAScript语句
查看>>
HR的工资条小密码---添加分页符
查看>>
MySQL show processlist说明
查看>>
perl之bless的用法
查看>>
centos安装php5.6
查看>>
类与对象 - PHP手册笔记
查看>>
【学神-RHEL7】P6-Python字典的使用
查看>>
Linux 磁盘管理与维护命令
查看>>
稀里糊涂的过年--在外过的第一个年
查看>>
mysql心得
查看>>
DataGridView新特色、常用操作
查看>>
CF #318 C. Bear and Poker
查看>>
maven的配置
查看>>