本人软件开发人员,在此对TCP/IP做一个了解,所以有的问题并没有深入去探究。
为什么会有IP协议的存在?
底层的以太网协议规定了电子信号如何组成数据包,解决了子网内部的点对点通信,可以使用MAC地址。但是它无法解决多个局域网如何互通的问题,所以就出现了IP协议及IP地址。所以说,IP协议实现了路由功能;
我的理解:MAC是物理层次表明设备的唯一标识,一般不可更改,IP是在网络拓扑中表示设备的唯一标识,可以更改,即使你更改了IP地址,数据仍然会是以之前的IP地址在网络拓扑中传输,此时并不涉及现实设备端口。
以太网的数据包大小是固定的,最初是1518个byte,现在是1522个byte,1500个byte是负载,22byte是头信息,IP数据包在以太网数据包的负载里面,它的头信息最少需要20byte,所以IP数据包最多负载1480byte,TCP数据包在IP数据包里面,头信息最少20byte,所以TCP最大负载为1460byte。但是由于TCP/IP协议往往有额外头信息,所以TCP负载实际为1400byte左右,所以1500byte的数据需要2个TCP数据包。
日常开发中,如果要传输10MB的数据,需要发送7100多个包,发送时,TCP协议为每个包编号(seq),以便接受方按照顺序还原,万一丢包,也可以知道丢失的是哪个包。第一个包编号是随机数,假设是1,如该数据负载长度为100,则第二个包编号为101;所以 每个数据包可以得到两个编号:自身的编号和下一个的编号。接受方可以方便排序。
OSI的七层协议
物理层–>数据链路层–>网络层–>传输层–>会话层–>表示层–>应用层
OSI七层模型和TCP/IP四层模型的关系
1.1 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。
1.2 OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
1.3 OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。
TCP:transmission control protocol 传输控制协议
UDP:user data protocol 用户数据报协议
这里特别提一下HTTPS:我们知道HTTPS与HTTP的主要区别可以简单的认为是HTTPS多了一个SSL加密,但是SSL加密是在TCP/IP四层协议模型中的传输层进行的,HTTP是属于应用层协议,所以HTTPS可以说是介于传输层和应用层之间的一个协议。
常用协议端口: HTTP:80; FTP:21; HTTPS:443; TELNET:23; SSH:22;
数据链路层: 并没有确定的描述这一层的实现,只要求可以提供给其上层—网络层,提供一个访问接口,以便在其上传递IP分组。
网络层: 整个协议栈的核心,功能是把分组发往目标网络或主机。同时为了尽快发送分组,需要沿不同的路径进行分组传递,因此,分组到达的顺序和发送的顺序可能不同,需要上层必须对分组进行排序;
传输层: 使源端主机和目标主机的对等实体可以进行对话。
应用层: 面向不同的网络应用引入了不同的应用层协议。基于TCP协议的,如:FTP、TELNET、HTTP;还有基于UDP协议的;
IP协议提供不可靠、无连接的服务,依赖其他层的协议进行差错控制:在局域网环境中IP协议往往被封装在以太网帧中传递,所有的TCP、UDP协议都封装在IP数据报中传送。
IP报文格式:
其中IP头部格式为:
版本: 4bit,标识当前协议的版本号,如IPV4为0100,IPV6为0110;
报头长度: 4bit;标识IP头部长度占IP报文头部长度的数目,普通的IP头部值为5,最多可以有60字节的长度。
服务类型: 8bit,前3bit已被忽略,第8bit保留未用,4-7bit分别表示延迟、吞吐量、可靠性、花费。当都取1时表示最小延时、最大吞吐量、最高可靠性、最小费用。全为0表示一般服务。作用举例:TELNET协议可能要求最小延时,FTP可能要求最大吞吐量,SNMP可能要求最高可靠性,NNTP可能要求最小费用,ICMP可能无特殊要求;
总长度字段: 16bit,指明整个数据报的长度,最大长度为65535字节;
标识: 16bit,用来标识主机发送的每一份数据报,通常每发一份则自动加1;
标志位: 3bit,表示一份数据报是否需要分段;
段偏移量: 13bit,如果一份数据报需要分段的话,此字段指明该段位偏移数据距原始数据包开始的位置。
生存期: 8bit,用来表示数据报最多经过的路由器数量,由发送数据的源主机设置:通常为32、64、128,每经过一个路由,其值减1,直到为0时则被丢弃。
协议: 8bit,表示此报文封装的上层协议,如ICMP(1),IGMP(2),TCP(6),UDP(17)
头部校验和: 16bit,内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和。(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)。
可选项: 32bit,用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求。
其中TCP数据头部结构为:
源端口号: 16bit,注意并不是IP地址,是应用的端口号,0~65535之间;
顺序号: 32bit,来标识从TCP源端向TCP目标端发送的数据字节流;
确认号: 32bit,只有ACK为1时,这个才有效,包含目标端所期望收到源端的下一个数据字节;
头部长度: 4bit;标识TCP头部长度占IP报文头部长度的数目,没有任何选项的TCP头部长20字节,最多可以有60字节的长度。
URG: 1bit,紧急指针。
ACK: 1bit,确认序列号;
PSH: 1bit,接受方应该尽快将这个报文段交给应用层;
RST: 1bit,重建链接;
SYN: 1bit,发送链接;
FIN: 1bit,释放链接;
窗口大小: 16bit,接受缓冲区,用来告诉TCP链接对方端自己能接受的最大长度;
紧急指针: 只有URG标识位为1时才有意义;
请阅读下一遍文章:
TCP协议讲解(一)