深入理解TCP/IP

通过此贴记录一下学习笔记,如若有哪处有错,还请诸位大佬指点一二!

1、TCP/IP基础知识

1.1 TCP/IP协议分层模型

  1. 硬件(物理层):负责数据传输的硬件,相当于以太网或电话线路等物理层的设备。
  2. 网络接口层(数据链路层):互联设备之间传送和识别数据帧,比如数据帧与比特流之间的转换、数据帧的生成与接受等
  3. 网络层:地址管理与路由选择。此层主要负责寻址和路由选择,将数据传输到正确的地址。常用的协议有 : IP / ARP / ICMP(从IP中解析出MAC地址)
  4. 传输层:管理两个节点之间的数据传输,负责可靠传输。常见协议有:TCP\UDP等
  5. 应用层(会话层及以上的分层):会话层负责建立和断开通讯链接,以及数据分割等数据传输相关的管理;表现层负责将应用处理的信息转化为方便网络传输的格式,或将下一层的数据转换为上层能够处理的格式;应用层主要针对的是具体的应用场景,如SMTP\FTP\SNMP\TELNET与SSH等

数据结构:
接收端MAC地址+发送端MAC地址+以太网类型 -> 发送端IP地址+接收端IP地址+协议类型 -> 目标端口号+源端口号 -> 数据 -> 循环冗余校验

问题:既然MAC地址是唯一的,那么为什么还要多余设计一个IP地址呢 ?

IP 地址是一个网卡在网络世界中的通讯地址,相当于我们现实世界的门牌号码,也就是说一个网卡在同一时间段内,只能有一个IP地址,一个机器可以有多个IP地址(有线网卡与无线网卡)。MAC地址也是唯一的,可以看作是网卡的身份证号,它是根据供应商的不同决定的唯一性标识,所以必然就导致其没有办法进行规律化和区域化。为了定位位置,只有MAC地址肯定是不行的,所以需要设计IP地址来实现远程定位详细地址的协议。(MAC地址也可以定位,不过通讯范围小,仅仅局限于一个子网内)。

1.2、数据链路层

数据链路层是TCP/IP协议的基础,必须了解

MAC地址在网卡出厂时,就被写入到了ROM中,地址长48位:第1位是单播地址0/多播地址1,第二位是全局地址0/局部地址1,3至24位由IEEE管理使其不重复,25~48位由厂商管理,保证产品之间不重复。但是呢,MAC地址也是可能出现重复的状况,但是只要不同属于一个数据链路就不会出现问题(比如,人们可以自己在微机板上烧录自己的MAC地址)

共享介质型网络有两种介质访问方式:争用方式和令牌传递方式。其中,争用方式会发生冲突,可以使用CSMA/CD方法,使每个站在发送前检查冲突。;令牌传递方式则使用一段叫做“令牌”的特殊报文段,控制传输权限,只有获得令牌的站才可以发送数据(会出现令牌环问题,采用生成树方法或源路由法解决)。

非共享介质网络通常采用全双工通信,可以使用交换机,根据信号中的目标地址,将信号直接传输至目标机器。交换机有两种转发方式:存储转发和直接转发,存储转发可以避免发送因重复而破环的帧和错误帧;直接转发具有延迟较短的优点,但是不可避免地有发送错误帧的可能。

2、IP 网络协议

从上面的描述中可以看出,数据链路层主要负责在互联同一数据链路的节点之间进行包传递,如果需要跨数据链路进行数据通信的话,就需要用到IP协议了

IP协议为了实现简单化与高速化,采用了面向无连接的方式进行数据传输(如若出错,使用ICMP返回错误信息)。

IP地址32位,由网络标识与主机标识共同确保其唯一性。其有四个等级:A、B、C、D,主要区别在于网络标识位的位数不同。(主机标识不可全部为0或1)。随着互联网覆盖范围的增加,ABCD分类不够用了,此时引入子网掩码,自由地定位自己地网络标识位的长度,相对缓解了全局IP不足的问题。

有了IP地址之后,另外需要路由控制来控制数据包的转发。路由控制由路由控制表来实现,其保存了网络地址与下一步应该发送至的路由器的地址。

此时有一个问题:网络层与数据链路层之间进行数据交换时,不同的数据链路层允许传输的最大传输单元大小不同,所以必须得对IP数据分片处理。分片后,在目标主机处进行重组。此时问题又来了:如果某个分片丢失,则一整段数据就都无用了,为了解决这个问题,提出了路径MTU发现 ,提前寻找所有数据链路中允许传输包的最小值,发送主机在发送数据前,就将数据分片,这样就不需要在传输过程中进行分片处理了。(路径MTU原理:发送端主机发送数据时,不允许分片,如果出错,使用ICMP的不可达消息将该处数据链路层的MTU大小发送给主机,然后使用该MTU进行传输,不断迭代,直到成功发送为止,最后一次MTU即为合适大小)。

深入理解TCP/IP_第1张图片
–引用于CSDN粪逗er

IP协议有关技术: DNS(Domain Name System) \ ARP(Address Resolution Protocal) \ ICMP \ DHCP(Dynamic Host Configuration Protocal) \ NAT(NetWork Address Translator) 等。有时间的话,再另开新帖进行记录。

3、TCP与UDP

终于写到这块了,只记录一些容易忽略的东西

UDP 为了追求速度,不提供任何复杂的控制机制。如若出现丢包、乱序等问题,也不会进行纠正处理。如果需要这些操作,只能在应用层面进行处理。

UDP首部非常简单,为源端口号、目标端口号、包长度和校验和

TCP

问题1:重发超时如何确定?

最理想的情况下,找到一个最小时间,保证“确定应答一定能够在这个时间段内返回”。然而这个时间会随着数据包所途经的网络环境的不同而变化。所以,它在每次发包时,都会计算往返时间及其偏差,将二者相加后,重发超时的时间就是比这个总和稍大一些的值。

问题2:tcp如何确定发送数据包的大小?

最理想的情况下,最大消息长度(MSS)为IP中不会被分片处理的最大数据长度。MSS是在三次握手的时候,在两端主机之间被计算得出的。

问题3:在使用窗口控制的时候,如果出现段丢失的情况怎么办?

没有使用窗口控制时,未收到确认应答信息的数据都会被重发。而使用了窗口控制之后,某些确认应答即使丢失了,也不需要进行重发操作。而当出现数据丢失的情况下,如果收到一个自己应该接收的序号以外的数据,会针对当前为止收到的数据返回确认应答。这种机制比超时管理更加高效。

问题4:拥塞控制

慢启动、拥塞避免、快重传、快恢复。启动时,采用慢启动策略,将拥塞窗口大小设为1,随着每次包的成功往返,拥塞窗口以1、2、4指数级增长。为防止网络阻塞的发生,设置一个慢启动阈值,当窗口大小超过阈值后,按比例增长,呈直线上升趋势。发生段丢失时,如果是由重复确认应答而触发的高速重发控制时,网络环境不一定很差,所以窗口大小被设置为慢启动阈值+3个数据段的大小;如果时因为超时重传而触发的超时控制的话,网络环境一定非常堵塞,故窗口大小从1重新开始。(慢开始阈值都变为当前窗口大小的一半)

未完待续……

你可能感兴趣的:(基础汇总,tcp/ip,网络,网络协议)