《TCP/IP》笔记

这里写图片描述
IP头部大小占20个字节

  • 生存时间TTL(Time To Time)
    防止数据包在网络上环回,即无限循环跳转。每经过一个节点,TTL都会-1,当它为0时,则该数据报被丢弃。
    Linux 下 输入traceroute + IP或者网址 可跟踪经过的路由跳数情况

  • MTU(最大传输单元)
    这里写图片描述

  • MTU分片例子:
  • 这里写图片描述

这里写图片描述

  • 源端口和目的端口:都为16位,范围 0~65535。
  • 序列号: 32位,定义本报文第一个数据字节的序号。
  • 确认序号: 32位,接收者希望下次接收序列号为该确认号的数据。
  • 保留位:给除URG、ACK、PUSH、RST、SYN、FIN之外的其他控制位用。
    -控制位
    URG:紧急指针有效
    ACK:确认字段有效
    PUSH:立即推送数据
    SYN:建立连接
    FIN:终止连接
    窗口值: 16位,接收方的接收窗口大小,用于流量控制。
    校验和: 校验结果,强制使用。
    紧急指针: URG有效该16位才有效。
    可选项:最多40个字节(有时间戳、窗口扩大、最大报文长、SACK选项等)。

三次握手
这里写图片描述
随机选择序列号的作用:
防止在网络中被延迟的分组在以后又被传送,而导致错误的解释。

为什么需要三次握手?
谢希仁著《计算机网络》中讲到“三次握手”目的是“为了防止已失效的连接请求报文段突然又传到了服务端,因而产生错误”。

TCP四次挥手
这里写图片描述

TIME_WAIT状态停留时间:2MSL,MSL通常是30s,1min或2min。
TIME_WAIT的作用:
1.可靠的实现TCP全双工连接的终止
2.防止已断开连接的客户端在2MSL内再继续连接,与后来的客户端竞争。

如何避免TIME_WAIT?
设置地址复用选项,编程中用
int swich=1;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&swich,sizeof(swich));

TCP状态转换图:

这里写图片描述

TCP提供的服务:进程之间的通信,基于字节流的,面向连接的,全双工的可靠的通信服务。

半关闭:连接的一端在发送了FIN之后还能继续接受数据的能力。

编程时可采用shutdown而非close来关闭连接。

Linux下用 shutdown(int sockfd, 2);

SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。

SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作。

SHUT_RDWR(2):关闭sockfd的读写功能。

netstat -anpt 可查看具体的网络状态

TCP的滑动窗口协议:

先看一下滑动窗口:
这里写图片描述

滑动窗口协议的作用:

  1. 保证数据的可靠传递。(未确认数据发送方存起来)
  2. 保证数据的有序传输。(乱序数据接收方存起来)
  3. 提供流控制机制(发送方太快必须阻塞等待)

窗口大小是rwnd和cwnd中的较小值。
接收端可以使窗口展开或合拢,但不应该使其缩回。

Nagle算法:
当网络容量利用率非常低时,为了尽可能发送大块数据,避免网络中充斥着许多小数据块,需要用到Nagle算法。

Nagle算法步骤:
1.发送端把从应用层收到的第一个数据发送出去
2.发送完第一个后,发送端缓冲数据并等待,直到:a 收到上一次的确认 ;b 积累到MSS(最大报文长度)大小的数据。
重复步骤2。

禁用Nagle算法:

setsockopt TCP_NODELAY选项

禁用说明:在默认情况下,发送数据采用Nagle算法,虽然提高了网络吞吐量,但在一些交互性很强的应用程序是不允许的,此时可以禁用Nagle算法,应用程序向内核递交的每个数据都会立即发送出去。虽然禁用了Nagle算法,但网络传输仍受到TCP确认延迟机制的影响。

ACK:不消耗序列号,不需要确认。
发送ACK的几个原则:

  1. 在发送数据时捎带确认,减少通信量
  2. 延迟确认原则,同样是避免ACK报文段产生的过多报文段
  3. 在任何时候不能有两个以上的按序的未被确认的报文段
  4. 收到乱序报立即发送ACK
  5. 当丢失的报文段到达时立即发送ACK
  6. 收到重复的报文段立即发送ACK

拥塞现象:
拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。所以有合理的拥塞控制的方法。

两个参数:拥塞窗口(cwnd),门限值

  1. 实际发送窗口W=min(cwnd, rwnd)
  2. 如果接收方慢,W=rwnd(接收窗口)
  3. 如果网络慢,那么W=cwnd

拥塞控制时的算法:

1. 慢启动(Slow start)

初始化cwnd=1MSS
对每一个到达的ACK,cwnd+=1MSS;
发送一个报文段,ACK到达,那么cwnd=2;
发生两个报文段,第一个ACK到时cwnd=3,第二个到达时cwnd=4;
然后可发送4个报文段,全部确认时cwnd=8。

2. 拥塞避免(Congestion Avoidance)

加法增大过程:

cwnd超越了ssthresh后,每收到一个ACK,此时cwnd+=1/cwnd

如何认为cwnd已经足够大了呢?

需要重传数据,TCP认为重传表示有包丢失

重传发生时(乘法减小):

ssthresh(慢启动阈值)=min(cwnd/2, 2)
cwnd=1
重新进入慢启动过程

3. 快速重传与恢复(Fast Retransmit & Fast Recovery)

快速重传:当收到3个重复ACK时的措施。
ssthresh(慢启动阈值)=min(cwnd/2, 2)
cwnd=ssthresh+3
如果再收到重复的ACK,cwnd+=1MSS
如果收到新数据的ACK,那么cwnd=ssthresh,重新进入加法增大的过程。

这里写图片描述
RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。也就是一个报文段从发送出去到收到确认的时间。

这里写图片描述

TCP变种(HSTCP,BICTCP/CUBIC,FastTCP)
窗口增长方式:加法增大,乘法减小。在数据丢包时,窗口减半,难以充分利用网络带宽。解决方法:TCP变种(HSTCP,BICTCP/CUBIC,FastTCP)。

BIC-TCP
这里写图片描述

当出现丢包后,把当前窗口设为wmax,乘法减小后的窗口设置为wmin,两者之间二分法逼近最合适的窗口值。

当超过wmax之后,进入新的wmax探测过程。

这里写图片描述

  1. Length:报文(包括首部)的总长度
  2. checksum:可选的,覆盖数据和首部
  3. 特征:
    提供给应用发送不可靠报文的选项,通常用于多播
    无需连接的概念,提供快速的数据发送
    没有流控和拥塞控制
    应用:TFTP、SNMP、DHCP、DNS、RIP、RTP。

ARP(地址解析协议)
这里写图片描述
ARP用于确定本地可达的IPv4子网使用的IPv4地址对应的硬件地址。

MAC物理地址:
某个网卡的标识符,全球唯一。以太网帧只使用物理地址来通信,物理地址由ARP表和IP查出。

Linux 或Windows cdm 下输入arp -a 来显示ARP缓存中的所有条目。

表格的生成是借助ARP协议,向其他电脑发送自己的ARP地址,然后记录其他电脑的ARP地址。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值