HCIA 02
HCIA网络参考模型
OSI参考模型
1 | 名称 | 服务 | 说明 | 常见协议 |
---|---|---|---|---|
Application layer | 应用层 | 为应用程序提供网络服务 | 面向用户的APP,承载用户的数据,微信聊天的文字、图片都属于应用层数据 | HTTP Telnet FTP SMTP TFTP |
Presentation layer | 表示层 | 数据格式化、加密、解密 | 计算机用自己的编码方式,对用户的数据进行编码,如用JERP编码方式表示各种图片数据等等 | |
Session layer | 会话层 | 建立、维护、管理会话连接 | 两个程序之间的接口,比如美团APP可以调用微信的支付,是通过二者之间的会话层接口 | |
Transport layer | 传输层 | 建立、维护、管理端到端的连接 | 用于建立TCP或UDP链接,并给数据报文打端口号 | TCP UDP |
Network layer | 网络层 | IP寻址和路由的选择 | 给数据包打上IP地址,用于路由转发。有了IP地址,网络设备才知道数据包应该发往互联网那个设备 | IP IGMP ICMP |
Data link layer | 数据链路层 | 控制网络层和物理层之间的通信 | 给数据包打上MAC地址,MAC地址是两个直连节点通信的方式 | Ethernet PPP PPPoE |
Physical layer | 物理层 | 比特流传输 | 物理介质 网线光纤 |
TCP/IP参考模型
TCP/IP模型对OSI模型进行了简化,将OSI模型的上三层进行了合并。
TCP和UDP报头
TCP报文头部
Source Port:源端口,标识是那个应用程序发送,长度为16比特。
Destination Port:目的端口,标识那个程序接受,长度16比特。
Sequence Number:序号字段,TCP连接中每个报文都有序列号,长度32比特。
Acknowledgment Number:确认号,用于对接收到的报文的确认。
Header Length:头部长度,TCP报文头部长度,默认情况下,TCP头部为20字节。
Control bits:控制位,包含FIN、ACK、SYN等标志位。
Winodw:窗口TCP的流量控制,这个值表明当前接收端可接收的最大数据总数(字节为单位)。窗口最大为65535字节,长度16比特。
checksum:校验字段,由发端计算和存储,并由收端进行验证,用于校验数据传输中是否有损坏。
UDP报文头部
Source Port:源端口,标识是那个应用程序发送,长度为16比特。
Destination Port:目的端口,标识那个程序接受,长度16比特。
Length:报文总长度
TCP三次握手
术语:
SYN 同步位;SYN=1,表示进行一个连接请求。
ACK 确认位;ACK=1,表示确认有效;ACK=0,表示确认无效。
seq 序列号
ack 确认号;对方发送序号seq+1
第一次:
Client主动发送握手请求,第一次握手:
Client:SYN=1,seq=x;
其中:Client发送主动请求,随机序号x;
第二次:
Server接收到Client的主动握手报文,也主动发送主动握手请求
Server:SYN=1,ACK=1,ack=x+1,seq=y;
其中:Server发送主动请购,确认有效,确认号(Client第一次发送的序列号x+1),随机序号y;
第三次:
Client接收到Server的主动握手请求
Client:ACK=1,ack=y+1,seq=x+1;
其中:确认有效,确认号(Server第一次发送的序列号y+1),序号x+1(序号第一次随机,第二次发送序号为第一次随机序号+1)
双方确认后,数据传输
第一次握手,客户端发送网络包,服务器收到了。服务器端得出结论:客户端的发送能力,服务器端的接收能力是正常的。
第二次握手,服务器端发送网络包,客户端收到了。客户端得出结论,服务器端接收发送能力,客户端的接收能力发送能力正常的。(但是服务器并不知道客户端接收能力是否正常)
第三次握手,服务器端收到网络包。服务器端得出结论,客户端接收发送能力正常。
TCP确认机制
在我们真实的网络传输中,TCP并不是以“消息”为单位进行编号的,而是以字节为单位进行编号的,也就是在我们发送的消息中对消息的每一个字节进行编号,编号称为序列号,发送方发送的报文里面会包含序号,接收方会返回一个ack确认序号,发送方通过这个ack确认序号就可以知道接收方那些数据收到了,哪些数据没收到。 这也就是TCP中的确认应答机制。
Client每次发送1000字节的内容,Server反馈接收到信号
Client:seq=1000
Server:ack=1001
Client:seq=2001
Server:2002
TCP滑动窗口
滑动窗口本质上就是通过一次可以发送多条消息,就不需要发一次消息就停下来等待ACK的返回,可以继续发下一条消息,这样子就可以边发消息边等待ack,效率自然就提高了,每返回一个ack就继续发送下一条消息。这样子就好像一个窗口一直在向前移动一样,所以就形成了滑动窗口,滑动窗口效率就能在原基础上提高一些了。
TCP四次挥手
术语:
FIN 段开位;FIN=1,表示断开连接并且不在主动发送数据;ACK 确认位;ACK=1,表示确认有效;ACK=0,表示确认无效。
seq 序列号
ack 确认号;对方发送序号seq+1
第一次:
Client主动发送挥手请求,请求断开:
Client:FIN=1,seq=u;
其中:Client发送挥手请求,随机序号u;
第二次:
Server接收到Client的挥手报文,但是不发送主动挥手报文,因为还有数据没有传输完成,处于半关闭状态,所以只发送有效位、确认位和序号位
Server:ACK=1,ack=u+1,seq=v;
其中:Server确认有效,确认号(Client第一次发送的序列号u+1),随机序号v;
Server继续发送数据
第三次
Server数据传输完成,发送断开位,请求断开
Server:FIN=1,ack=u+1,seq=w
其中,Server发送断开位,确认位u+1(因为Client一直没有发送序号,所以Server发送确认位和上次一样),seq=w(因为继续发送数据的过程中,不确认发送几次,所以序号为w)
第四次
Client收到Server发送的断开位
Client:ACK=1,ack=w+1,seq=u+1
其中,Client发送有效位,发送确认位w+1,序号位u+1
网络层协议
IP协议、OSPF、IS-IS、BGP等各种路由协议。
链路层协议
MAC地址
常见的物理层传输介质
双绞线、光纤、串口电缆、无线电磁波
数据通信过程
应用层
头部 | 涉及层 | 单位 |
---|---|---|
DATA | 应用层 | 数据Date |
TCP Header | 传输层 | 段 Segment |
IP Header | 网络层 | 包 Packet |
Eth Header | 数据链路层 | 帧 Frame |
物理层 | 位 Bit |