概念
国家标准化组织ISO指定的一个计算机互联的标准。open system interconnection。
七层:
1.应用层:网络服务与最终用户的一个接口。协议有:http,ftp,tftp,smtp,dns,telnets,dhcp
2.表示层:数据的表示,安全和压缩。在五层网络模型中已经被合并到应用层。例如jpeg,ascii等。
3.会话层:建立,管理,终止会话,在五层模型里面已经合并到了应用层。
以上三个统一为应用层。
4.传输层:定义传输协议的协议端口号,以及流控和差错校验。协议有:tcp,udp,数据包一旦离开网卡即进入网络传输层。
5.网络层:进行逻辑地址的寻址,实现不同的网络之间的路径选择。协议有icmp,igmp,arp,rarp。
6.数据链路层:建立逻辑链接,进行硬件地址的寻址,差错校验等功能。将比特组合成字节然后组合成帧,用mac地址访问介质,错误发现但是不能纠正。
7.物理层:建立,维护,断开物理链接。tcp/ip层级模型结构,应用层之间的协议通过逐级调用传输层,网络链路层和物理数据链路层,而可以实现应用层之间的应用程序通讯互联。
应用层需要关心应用程序的逻辑细节,而不是数据在网络中的传输活动。应用层其下三层则处理真正的通信细节。在整个internet的整个发展过程中所有的思想和重点都以一种rfc(request for comments)的文档格式存在,针对每一种特定的tcp/ip应用,都有相应的rfc文档。
一些典型的tcp/ip应用有ftp,telnet,smtp等,rfc使一些基本相同的tcp/ip 协议应用程序实现了标准化,从而使得不同的厂家开发的应用程序可以互相连通。
tcp/ip是一个协议簇,由许多的协议组成,而http属于tcp/ip协议簇。
应用层包含应用层,表示层,会话层。传输层同等与传输层。网络层同等与网络层。数据链路层和物理层数据链路层。
osi七层网络模型 | tcp/ip四层网络模型 | 对应的协议 | 描述 |
---|---|---|---|
1应用层Application | 1应用层 | HTTP、TFTP, FTP, NFS, WAIS、SMTP | |
2表示层Presentation | 1 | Telnet, Rlogin, SNMP, Gopher | |
3会话层Session | 1 | SMTP, DNS | |
4传输层Transport | 4传输层 | tcp,udp,sctp,rtp | |
5网络层Network | 5网络层 | IP(网际协议)、ARP(地址解析协议)、RARP(逆地址解析协议) | |
6数据链路层Data Link | 6数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP | |
7物理层Physical | 6 | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
tcp/ip如何通信
利用tcp/ip协议族进行网络通讯时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接受端则往应用层走,我们以http举例,首先作为发送端的客户端在应用层发出一个想看看某个web页面的请求。接着为了传输方便,在传输层把应用层收到的数据进行分割,并在各个报文上打上标记序号以及端口号后转发给网络层,在网络层ip协议,增加通讯目的地的mac地址后转发给数据链路层。
并且发送端在层与层之间传输时,没经过一层都会被打上该层所独有的头部信息,反而接收端在层与层之间一层层的把对应的首部消去。这种把数据包起来的方法叫做封装。
ip传输的协议
ip协议就是将各种数据包传输给对方,其中最重要的就是知道目标机器的ip地址和mac地址。
ip地址就是指明了节点被分配的地址,mac地址时网卡所属的固定地址。ip地址和mac地址进行配对,ip地址可以变换,但是mac地址基本不会更改。多台计算机经过多台中专设备,中转设备的mac地址来搜索下一个目标的。这时,会采用arp协议,一种地址解析的协议。
根据通信对方的ip地址就可以反差出对方的mac地址。
确保可靠的tcp协议
tcp位于传输层,提供可可靠的字节流服务。所谓字节流服务就是将大块的数据切割成报文段为单位的数据进行管理。
三次握手中,syn和ack,发送端首先会发送一个带syn标志的数据包给对方。接收端收到后,回传以一个带有syn/ack标志的数据包,代表握手结束。若在握手过程中莫名中断,tcp会再次以相同的顺序发送相同的数据包。
- 三次握手
sequenceDiagram
发送端->>接收端: 标有syn的数据包发给你了
接收端->>发送端: 收到,且发送你标有syn/ack的数据包
发送端->>接收端: 发送标有ack的数据包了
- 三次握手链接,四次握手断开链接
sequenceDiagram
client->>server: SYN
server->>client: SYN/ACK
client->>server: ACK
client->>server: HTTP请求
server->>client: HTTP相应
server->>client: FIN
client->>server: ACK
client->>server: FIN
server->>client: ACK
UDP报文段首部
- udp是无连接的,即发送之前不需要建立链接。
- udp尽最大的努力交付。但是不保证可靠交付,也没有拥塞控制。
- udp是面向报文的。udp没有拥塞控制,很适合多媒体通信的要求。
- udp支持一对一,一对多,多对一,多对多的交互通信。
- udp的首部开销小,只有8个字节
-
端口号:用来表示发送和接受进程,由于ip层已经把ip数据报分配给tcp或udp(根据IP首部的协议字段值),因此tcp端口由tcp查看,udp端口由udp查看。端口号互相独立。
-
长度:udp长度字段指的是udp首部和udp数据的长度。该字段的最小值位8字节,发送一份0字节的udp数据报是OK
-
校验和:udp校验和是一个端到端校验和,她由发送端计算,然后由接收端验证。其目的是为了发现udp首部和数据在发送端到接收端的之间发生的任何改动
TCP报文段首部
tcp报文首部的前20个字节时固定的,后面的字节时根据需要添加的。一个5个四字节段。
-
第一个4字节
- 源端口16位
- 目标端口16位
-
第二个和第三个4字节
- 序号,32位;当前tcp数据段第一个字节占整个字节流的相对位置。
- 确认号,32位;代表接收端希望接受的数据序号,上次接受到的数据包的序号+1,当ack标志为1时生效。
-
第四个4字节
- 数据偏移,4位,代表tcp首部长度,最大位60字节
- 6个标志位,每个标志位占1位
- SYN,为同步标志,用于数据同步;
- ACK,为确认序号,ACK=1时确认号才有效;
- FIN,为结束序号,用于发送端提出断开连接;
- URG,为紧急序号,URG=1是紧急指针有效;
- PSH,指示接收方立即将数据提交给应用层,而不是等待缓冲区满;
- RST,重置连接。
-
第五个4字节
- 校验和,16位,用于校验数据的完整性
- 紧急指针,16位,只有当URG标识位为1时,紧急指针才有效。紧急指针的值和序号的相加值为紧急数据的的最后一个字节位置。用于发送紧急数据。
IP报文段首部
-
第一个4字节
- 版本号(Version),4位;用于标识IP协议版本,IPv4是0100,IPv6是0110,也就是二进制的4和6
- 首部长度(Internet Header Length),4位;用于标识首部的长度,单位为4字节,所以首部长度最大值为:(2^4 - 1) * 4 = 60字节,但一般只推荐使用20字节的固定长度。
- 服务类型(Type Of Service),8位;用于标识IP包的优先级,但现在并未使用
- 总长度(Total Length),16位;标识IP数据报的总长度,最大为:2^16 -1 = 65535字节。
-
第二个四字节
- 标识(Identification),16位;用于标识IP数据报,如果因为数据链路层帧数据段长度限制(也就是MTU,支持的最大传输单元),IP数据报需要进行分片发送,则每个分片的IP数据报标识都是一致的。
- 标志(Flag),3位,但目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报。次低位为DF,DF=1代表不能分片,DF=0代表可以分片。
- 片偏移(Fragment Offset),13位;代表某个分片在原始数据中的相对位置
-
第三个四字节
- 生存时间(TTL),8位;以前代表IP数据报最大的生存时间,现在标识IP数据报可以经过的路由器数
- 协议(Protocol),8位;代表上层传输层协议的类型,1代表ICMP,2代表IGMP,6代表TCP,17代表UDP。
- 校验和(Header Checksum),16位;用于验证数据完整性,计算方法为,首先将校验和位置零,然后将每16位二进制反码求和即为校验和,最后写入校验和位置。
-
第四个四字节:源IP地址
-
第五个四字节:目的IP地址
以太网的帧
- 以太网帧中的数据长度规定最小46字节,最大1500字节。arp和rarp数据包的长度不够46字节,要在后面补填充位,最大值1500称为以太网的最大大传输单元MTU,不同的网络类型有不同的MTU。如果一个数据包从以太网路由到拨号电路上,数据包长度大于拨号链路的MTU,则需要对数据包进行分片了。
- ifconfig命令输出的”MTU:1500“,这个概念中指数据帧中的有效载荷的最大长度,不包括帧首部长度。
- MAC地址值网卡的硬件地址。长度时48位。时网卡出厂时固化的。用ifconfig命令查看一下,“HWaddr 00:15:F2:14:9E:3F”,部分就时硬件地址。