文章目录
1. 传输层协议 TCP UDP
1.1 TCP:传输控制协议
(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的传输协议。
TCP是可靠的流传输服务,通过主动确认的技术保证从一个主机传送到另一个主机的数据流不会出现重复数据或丢失数据的情况主动确认:发送方要求接收方在收到数据后,发送一个确认消息等到收到确认消息后,再发送下一个确认数据;超时重发:发送方在发送数据后,启动定时器,当定时器过期前,没有收到确认消息,则会重发最近已发送的数据包
TCP报文格式
32位端口号:
源端口和目的端口各占16位,2的16次方等于65536,看端口的命令:netstat。
TCP的包是没有IP地址的,那是IP层上的事。
32位序号:
也称为顺序号(Sequence Number),简写为SEQ
32位确认序号:
也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答。
6位标志字段:
ACK
置1时表示确认号(为合法,为0表示数据段不包含确认信息,确认号被忽略。
RST
置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
SYN
置1时用来发起一个连接。
FIN
置1时表示发端完成发送任务。用来释放连接,表明发送方没数据发送了。
URG
紧急指针,告诉接收TCP模块紧要指针域指着紧要数据。注:一般不使用。
PSH
置1时请求的数据段在接收方得到后就可直接送到应用程序,而不等到缓冲区满时才传送,一般不用。
4位数据偏移:
它的换算单位是32位(4个字节)。TCP的头部最低20最长60字节(4位二进制1111为十进制为15,15*4字节=60字节)。它指示了数据区在报文段中的起始偏移值。
16位窗口:
它告诉对方本端TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数。
16位紧急指针:
只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。注:一般不使用。
16位检验和:
检验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
选项(变长)
选项部分最长为:(24-1)*4-20字节(TCP报头最小长度)=40字节。
每个选项的开始都是1个Byte的kind字段,说明选项的类型,Kind为0/1的时候,选项只占1个Byte,其他选项在kind字段后面还有len字节,说明总长度包括kind和len的字节。
kind=2是最大报文段长度选项(Max Segment Size,MSS)。TCP连接初始化时,通信双方用该选项来协商最大报文段长度。TCP模块通常将MSS设置为(MTU-40)字节(减掉的这40字节包括20字节的TCP头部和20字节的IP头部)。这样携带TCP报文段的IP数据报的长度就不会超过MTU
(假设TCP头部和IP头部都不包含选项字段,并且这也是一般情况),从而避免本机发生IP分片。
对以太网而言,MSS值是1460(1500-40)字节。
填充:
为了使TCP首部为4byte的整数倍。
数据部分:
TCP报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种
“流协议"的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需要将SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。
TCP三次握手与四次挥手
TCP三次握手:
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP四次挥手:
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
1.2 UDP:户数据报协议
可以提供一种不可靠的、低延时的数据报传输。UDP协议的主要作用是将网络数据流量压缩成数据报的形式进行传输。每个数据报的前8个字节用来包含报头信息,剩余字节则是具体的传输数据。
与TCP相比,UDP更适合发送数据量比较少、但对响应速度要求比较高的情况。
UDP结构:
32位端口号:
源端口和目的端口各占16位
源端口是一个大于1023的16位数字,由基于UDP应用程序的用户进程随机选择。
32位长度:
指明了包括首部在内的UDP报文段长度。UDP长字段的值是UDP报文头的长度(8字节)与UDP所携带数据长度的总和。
32位校验和:
是指整个UDP报文头和UDP所带的数据的校验和(也包括伪报文头)。伪报文头不包括在真正的UDP报文头中,但是它可以保证UDP数据被正确的主机收到了。因在校验和中加入了伪头标,故ICMP除能防止单纯数据差错之外,对IP分组也具有保护作用。
1.3 TCP和UDP的区别
2. 网络层协议 IP,ICMP,ARP,RARP
2.1 IP(Internet Protocol)协议:
IP协议包含两个最基本的功能,即寻址和分片。
分片:当发送或接收数据时(例如收取电子邮件或浏览网页),信息将被拆分成若干个小块,称为数据包。每个数据包都包含发送者和接收者的IP地址。
寻址:数据包首先被发送到网关,网关读取数据包中的目的地址,然后将其转发到能够到达该目的地址的邻近的网关;每个网关都重复上面的过程,直到网关认定目的主机在其可以直接到达的网段或域中,则网关将数据包直接发送给目的计算机。
IP是TCP/IP协议族中最核心的协议,所有的TCP、UDP、ICMP、IGMP数据都以IP数据报的格式传输。
IPv4头部结构
4位版本号(Version):
标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)
4位首部长度(Header Length):
为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),一个IP包头的长度最长为“1111",即15*4=60个字节。IP包头最小长度为20字节,最大60字节。。
8位服务类型:
用于设置数据传输的优先权或者优先级,大小为8位。。
16位总长度:
指首部和数据之和的长度,单位为字节,理论上允许的最大IP数据报为65535字节(16位来表示包总长)。但是因为协议栈网络层下面的数据链路层一般允许的帧长远远小于这个值,例如以太网的MTU(即Maximum Transmission Unit,最大传输单元)通常在1500字节左右。
16位标识(identification)
Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。
3位标识位(flag):
(1)R:保留未用。
(2)DF:Don’t Fragment,"不分片”位,DF设置为0,表示可以分片,如果置1,IP层将不对数据报分片。
(3)MF:More Fragment,"更多的片”,除了最后一片置0外,其他每个组成数据报的片都要置1。
13位片偏移:
Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。
表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
8位生存时间(TTL)
当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。
这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
8位协议:
标识了上层所使用的协议。以下是比较常用的协议号:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
16位校验:
长度16位。用来做IP头部的正确性检测,但不包含数据部分。因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
32位起源和目标地址
标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。
IP层特点:无连接,不可靠,无序的
**不可靠:**IP层收到传输层发的数据立即打包发送,不会缓存,因为IP层不负责重传;本端IP层也不知道所发送的IP数据报是否被对端正确接收;IP数据报丢失主要有两种情况:一是传输途中整个数据报丢失;二是数据包被分片了,对端定时器超时后没有收到所有的分片,无法拼出原始数据报,只能把已收的分片丢弃;
**无序:**是指IP层收到对端发送到IP数据报后就会传给传输层,并不关心对端发送到先后顺序;如果上层有对顺序的要求则需要由传输层来保证;
2.2 ARP(Address Resolution Protocol,地址解析协议)
协助用户完成逻辑IP地址到MAC地址的转换。
所有安装了TCP/IP地址的主机都会维护一个ARP缓存装,查看本地ARP表的命令如下:arp-a
2.3 RARP(Reverse Address Resolution Protocol)
反向地址解析协议可以根据局域网中一个设备的MAC地址获取它的IP地址。
RARP协议广泛应用于无盘工作站,用于获取IP地址。普通计算机的IP地址保存在硬盘上,每次启动系统时可以从硬盘的配置文件中获得。但无盘工作站没有硬盘,因此它只能在每次启动时通过RARP协议向RARP服务器申请IP地址。
2.4 ICMP(Internet Control Message Protocol)
Internet控制报文协议、用于在IP主机、路由器之间传递控件消息。
通常可以使用它来探测主机或网络设备的在线状态。
ping命令的作用是通过发送“国际消息控制协议(ICMP)“回响请求消息来验证与另一台TCP/IP计算机的IP级连接状态,回响应答消息的接收情况将和往返过程的次数一起显示出来.
3. 应用层协议 HTTP,SNMP,FTP,SMTP,Telnet
HTTP:超文本传送协议
是面向事务的应用层协议,它是万维网上能够可靠地交换文件的重要基础。http使用面向连接的TCP作为运输层协议,保证了数据的可靠传输。
Telnet:远程终端协议
telnet是一个简单的远程终端协议,它也是因特网的正式标准。又称为终端仿真协议。
FTP:文件传输协议
FTP是因特网上使用得最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。FTP基于于TCP。
SMTP:电子邮件协议
即简单邮件传送协议。SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。SMTP通信的三个阶段:建立连接、邮件传送、连接释放。
4. 网络接口层
数据链路层协议
(1)点对点协议(Point-to-Point Protocol);
(2)以太网(Ethernet);
(3)高级数据链路协议(High-Level Data Link Protocol);
(4)帧中继(Frame Relay);
(5)异步传输模式(Asynchronous Transfer Mode);
以太网(Ethernet)
指的是由Xerox施乐公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今最普遍的局域网标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。以太网与IEEE802.3系列标准相类似。
包括标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)和10G(10Gbit/s)以太网。它们都符合IEEE802.3。
802.3帧的简要结构
前导码(Preamble)7Byte每个字节的值固定为0xAA.
帧开始符(SFD)1Byte标识以太网帧的开始,值为0xAB.
目的地址、源地址6Byte收、发主机mac地址;
长度/类型(Length/Type)2Byte 长度或协议类型,<=1500表示长度
数据和填充(Data and Pad)46~1500Byte由一个上层协议的协议数据单元PDU构成。可以发送的最大有效负载是1500字节。由于以太网的冲突检测特性,有效负载至少是46个字节。如果上层协议数据单元长度少于46个字节,必须增补到46个字节
帧校验序列(FCS)4Byte发现错误,丢弃此帧
5. OSI参考模型
OSI参考模型中每个层次接收到上层传递过来的数据后都要将本层次的控制信息加入数据单元的头部,一些层次还要将校验和等信息附加到数据单元的尾部,这个过程叫做封装。