一:TCP、UDP、IP报文格式
TCP报文封装格式:
源端口: 数据发送方的端口号。
目的端口: 数据接受方的端口号。
序号:序号用来标识从TCP发送端向TCP接收端发送的数据字节流
确认号:希望收到的下一个数据报文中的第一个字节的序号。
首部长度:由于TCP包含选项字段,因此长度范围为20-60字节。
保留:顾名思义,用来保留给以后用的。
紧急比特URG:当值为1时表示次报文段中有需要紧急处理。
确认比特ACK:值为1时确认号有效,值为0时确认号无效。
推动比特PSH:值为1时,提示接收端应用程序应该立即从TCP缓冲区读走数据,为后续接收的数据腾出空间。
复位比特RST:值为1时表示TCP连接存在严重的错误,需要重新进行连接。
同步比特SYN:值为1表示这是一个连接请求或连接接受报文。
终止比特FIN: 值为1表示要发送的数据报已经发送完毕,需要释放传送连接。
窗口字段:TCP连接的一端根据缓存空间的大小来确定自己接受窗口的大小,限制发送放的窗口上限。
检验和:用来检验首部和数据两部分的正确性。
紧急指针字段:URG比特被置1,并且一个16bits的紧急指针被置为一个正的偏移量,该偏移量必须与TCP首部中的序号字段相加,以便得出紧急数据的最后一个字节的序号。
UDP报文格式:
源端口号和目的端口号如上和TCP的相同。
UDP长度:UDP报文的字节长度(包括首部和数据)。
UDP校验和: 检验UDP首部和数据部分的正确性。
IP报文格式:
版本:指IP协议的版本。
首部长度:首部的长度
服务类型:如下图:
其中优先级用来区别优先级别不同的IP报文。
D表示要求有更低的时延。
T表示要求有更高的吞吐量。
R表示要求有更高的可靠性。
C标识要求有更小的费用
总长度:报文的长度。
标识:由于数据报长度超过传输网络的MTU(最大传输单元)而必须分片,这个标识字段的值被复制到所有数据报分片的标识字段中,使得这些分片在达到最终的目的地时可以依照标识字段的内容重新组成原先的数据报。
标志:最低位是MF,MF=1时,表示后面还有分片。
中间位的DF,DF=1时,表示不能分片。
片偏移: 和前面的数据分片相关,是本分片在原先数据报文中相对首位的偏移位。
生存时间:数据报在网络中存活的时间,所允许通过的路由器的最大数量,没通过一个路由器,该值自动减一,如果数值为0,路由器就可以把该数据报丢弃。
协议: 指出数据报携带的数据是使用何种协议,以便目的主机的IP层能知道次数据报上交到哪一个进程(不同协议有一个专门不同的进程处理)。
首部校验位和:对首部进行校验运算。
校验方法 : 在发送端,将IP数据报首部划分为多个16位的二进制序列,并将首部校验和字段置为0,用反码运算将所有16位序列对位相加后,将得到多的 和的反码写入首部校验和字段。接收端接收到数据报后,将数据报首部的所有字段组织成多个16位的二进制序列,再使用反码运算相加 一次,将得到的结果取反。如果结果为0代表没出错,否则出错。
==源地址:发送数据报的节点地址。
目的地址:接受数据报的节点地址。 ==
TCP的特点:面向连接的、可靠的、排序机制、确认、重传机制、流控(窗口机制) 协议号:6
UDP的特点:无连接、不可靠、乱序、没有确认机制,没有流控 协议号:17
TCP-----三次握手
拓扑结构是R1和R2相连,R2作为telnet的服务端,R1作为telnet的客户端。
那么当R1试图通过telnet去远程管理R2时,连接过程是怎么样的呢?
首先R1先向R2发送TCP连接请求,这个TCP连接请求的源端口号为61269是随机产生的,目的端口为23,并且在flags标记字段中,SYN字段被置位,也就表示R1先发送SYN置位的TCP请求连接,“Sequence number: 0 ”也就是序列号为0.那么R2收到SYN置位的请求连接后,向R1回送一个源端口为23,目的端口为61269,并且SYN和ACK置位的TCP消息,“Sequence number: 0 (relative sequence number),Acknowledgment number: 1 (relative ack number)”表示回送的TCP消息中序列号为0,而ACK确认号为1,确认号为1表示我已经收到了序列号为0的TCP请求消息,意在告诉对方可以发送seq序列号为1的TCP连接消息。那么R1收到后,就会向R2发送ACK置位的TCP消息,序列号为1,确认号也为1.至此三次握手建立完毕,可靠连接建立完成后,便可以进行数据的传输。
三次握手建立过程报文:
网关:一个网络想要去访问另外一个网络必须经过的关卡(出口)。
ARP(地址解析协议):把IP地址解析成MAC。
子网掩码:和IP地址一样由32位的二进制组成,是用来区分一个IP地址的网络位和主机位,通过1来匹配IP地址的网络位,用0来匹配IP地址的主机位。
网络地址:用来标识一个网络,特点是网络位不变,主机位全为0
判断两个IP地址是否处在同一个网络中,就是看两个IP地址对应的网络地址是否一样。
PCA和PCB通信,中间跨越交换机
ping是ICMP协议的一个工具,通过
ping可以测试源到目的之间的物理连通性。
当PCApingPCB时,数据通信的过程是这样的,
首先PCA会将目的IP地址和本身的子网掩码做一个与运算,判断是否处在同一个网络,显然计算后PCA和PCB都是处在1.1.1.0/24这个子网中,那么PCA开始向PCB发送数据,发送数据前需要对数据进行封装,那么数据在网络层的应该为其封装IP包头信息,而这个包头信息中有两个最重要的字段,一个是源IP,一个是目的IP。此时源IP应该是1.1.1.1,目的IP应该是1.1.1.2,网络层封装完成后,数据往下层继续传输,到达数据链路层,那么数据链路层会为其添加二层的帧头信息和FCS帧尾信息,而这个帧头信息中,有两个字段是重要的吧,一个是源MAC地址,一个是目的MAC地址。此时源MAC应该是PCA的MAC地址,也就是A,而目的MAC地址呢,显然对于PCA来说,它并不知道PCB的MAC地址,那么这时候数据帧是什么样子的呢?
显然数据帧无法正确封装,那么也就无法正常发送。此时,PCA就会想办法去获取PCB的MAC地址,怎么获取呢?通过ARP(地址解析协议),此时的PCA就会以广播的形式发送一个ARP请求报文,,源MAC是PCA的MAC,目的MAC是ffff.ffff.ffff的二层广播地址。
那么交换机收到这个ARP请求报文时,怎么操作呢?首先会先检查FCS,是否是一个完整的数据帧,接着会抓取该数据帧中的目的MAC地址与CAM(MAC地址表)中的条目信息进行匹配,如果有相应的条目,那么交换机就根据相应的条目往相应的接口进行转发,如果没有交换机则采取泛洪的操作,也就是往交换机的接收接口以外的所有接口发送,显然没有任何一个主机的MAC地址会是一个广播地址,那么在MAC地址表中肯定就不会存在广播MAC地址对应的接口表项信息了,那么这时候交换机将采取泛洪的操作,将ARP请求报文往除接收接口外的其他接口发送,那么连接在交换机上的所有PC都能收到这份ARP请求,首先他们会先检查FCS,是否是完整的数据帧,接着他们会拆开三层包头信息,发现目的IP地址并不是自己,那么将采取丢弃的操作,只有PCB这台主机拆开三层包头信息后,发现是给自己的,才会进行接收,并且提交给上层协议,那么此时PCB将会以单播的形式给PCA回应一个ARP响应报文,该报文中包含了PCB的MAC地址,那么PCA收到PCB响应的ARP报文信息,就能够获取到PCB的MAC地址了,也就是说PCA能够正常地封装其数据了,最终完成整个通信过程。
ARP请求报文:
ARP 回复报文:
PCA和PCB通信,中间跨越路由器
子网掩码都为255.255.255.0
图中PCA的IP地址为:1.1.1.1
网关地址(路由器连接PCA的接口的IP地址):1.1.1.254
PCA的MAC地址为:A
网关MAC地址(路由器连接PCA的接口的MAC地址):C
图中PCB的IP地址为:2.2.2.2
网关地址(路由器连接PCB的接口的IP地址):2.2.2.254
PCB的MAC地址为:B
网关MAC地址(路由器连接PCB的接口的MAC地址):D
PCA通过pingPCB的IP地址,实现数据通信,其过程是这样的,
首先PCA会拿PCB的IP地址和本地的子网掩码进行与运算,显然运算后可以知道PCA和PCB是属于不同的子网,那么此时PCA会检查是否有配置默认网关地址,如果没有,那么PCA将在其所在的网段内以广播地形式发送ARP请求报文,请求PCB的MAC地址,如果连接PCA所在的路由器的接口有开启代理ARP,那么路由器会代表PCB给PCA单播回应ARP响应报文,当然这项功能并不是现在我们所要了解,以后的课程学习中会慢慢地接触到。如果没有开启ARP代理,那么PCA将无法获得相应的目的MAC地址,也就无法正常的封装数据帧,那么通信将无法完成,即目的主机无法到达。如果有配置默认网关地址,那么PCA会以广播地形式发送ARP请求报文,请求路由器连接PCA所在接口的MAC地址,该ARP请求报文的目的MAC为广播地址,源MAC为PCA的地址,目的iP是PCB的IP地址,源IP地址是PCA的IP地址。
收到ARP请求报文的路由器接口将会以单播的形式给PCA回送一个ARP响应报文,该报文信息中包含了路由器接口的MAC地址,那么PCA收到ARP响应报文,就能够获取路由器接口的MAC地址,也就能够正常的封装数据帧。
当路由器连接PCA的接口收到PCA发送过来的数据帧,校验完FCS后,查看目的MAC发现是给自己的,那么路由器会继续拆三层的包头信息,发现目的IP地址并不是自己,而是2.2.2.2 ,那么路由器就会查找路由表,如果路由表中不存在相应的转发表项(表项具体是怎么样的,后面课程会学习到,现在暂时不用深究),那么该数据将被丢失,如果存在,则根据相应的表项往相应的接口进行转发,但是在转发前依然要进行数据封装吧,三层的信息依旧是原封不动吧,但是二层的帧头信息呢,必须改变吧,源MAC应该是路由器连接PCB的MAC地址,而目的MAC地址了,依旧还是通过广播发送ARP请求以获取PCB的MAC地址,最终完成数据帧的封装,将数据发送给PCB,这里要注意的是ping是一个双向的过程,也就是PCApingPCB的完整过程,应该是PCA将数据发送给PCB,然后再从PCB收到回应的数据,那么这样才称为一次完整的ping过程,显然PCB给PCA的回应,通信过程和PCA给PCB发送数据是类似的。
ICMP报文:
EIA/TIA 电子物理联盟
568A:绿白 绿 橙白 蓝 蓝白 橙 棕白 棕
568B:橙白 橙 绿白 蓝 蓝白 绿 棕白 棕
UTP:非屏蔽双绞线
STP:屏蔽双绞线 屏蔽双绞线相比非屏蔽双绞线而言具备抗干扰能力。
直通线和交叉线
直通线一般连接异种设备,比如PC和交换机、交换机和路由器
交叉线一般连接同种设备,比如PC和PC,交换机和交换机,路由器和路由器,PC和路由器