big endian little endian big endian:最高字节在地址最低位,最低字节在地址最高位,依次排列. little endian:最低字节在最低位,最高字节在最高位,反序排列. 比如将 0x1234 存入 0x0000 开始的内存. mem big endian little endian 0x0000 0x12 0x34 0x0001 0x34 0x12
路由表标志: U 该路由可用. G 该路由通过路由转发与目的地址相连,无此标志表示本机与目的地址在同一网络而直接相连. H 该路由的目的地址为主机地址,无此标志表示目的地址为网络地址. D 该路由由重定向报文创建. M 该路由被重定向报文修改. 标识G区别了间接路由和直接路由.有G即为间接路由.发往直接路由的分组包含目的地址的IP和链路层地址.发往间接路由的分组包含目的地址的IP,但链路层地址为间接路由的地址.
下段摘自linux man手册. 不同环境下,backlog的含义与实现都将不同. The behaviour of the backlog parameter on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets waiting to be accepted, instead of the number of incomplete connection requests. The maximum length of the queue for incomplete sockets can be set using the tcp_max_syn_backlog sysctl. When syncookies are enabled there is no logical maximum length and this sysctl setting is ignored.
二十一 TCP的超时与重传 RTT(往返时间):指发送端发送TCP报文段开始到接收到对方的确定所使用的时间. RTO(超时重传时间):发送端发送TCP报文段后,在RTO时间内没有收到对方确定,即重传该报文段. Jacobson 1988 RTO计算公式 Err = M - A A <- A + g * Err D <- D + h * (|Err| - D) RTO = A + 4D A 平滑的RTT(均值估计器) D 平滑的方差 g 增量 h 方差的增益 RTO值基于RTT的均值和方差,这更好的响应了RTT的变化. karn算法 假如发送一个分组,当发生超时,RTO指数退避,重传该分组,然后收到ACK.此时但并不能确定这个ACK是针对第一个分组还是重传分组,这就是重传多义性问题.karn算法针对这个问题 (1)对于超时重传的数据报的确认,不更新RTT. (2)RTO指数退避,下一次传送就使用这个RTO值. (3)重传数据确认之后,再次发送的数据如果正常被确定,恢复Jacobson 1988公式,更新RTO和RTT. RTT的测量 TCP在同一时刻只测量一个RTT.即如果发送一个报文段时,如果该连接的定时器已经使用,则该报文不被计时. RTT测量值取决于TCP定时器,而TCP定时器的溢出取决于内核引导的时间. (1)连接初始化(SYN) 初始值 A=0 D=3 RTO = A + 2D = 6 传输初始SYN使用的值.( 初始化使用2D, 以后都使用4D) 如果超时,计算此时的 RTO = A + 4D =12 ,然后指针退避,下次RTO为24. (2)第一个数据报文段 初始值 A=0 D=0 M为RTT的测量值 A = M + 0.5 D = A / 2 RTO = A + 4D (3)以后的数据报 Err = M - A
A = A + g * Err
D = D + h * (|Err| - D)
RTO = A + 4D 拥塞避免算法 拥塞避免算法和慢启动算法通常一起使用. 维持两个变量: 拥塞窗口( cwnd ) 慢启动门限( ssthresh ) (1)对一个给定的连接,初始化cwnd为1个报文段, ssthresh为65535个字节. (2)TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小.拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制.前者是发送方感受到的网络拥塞的估计,后者则与接收方在该连接上的可用缓存大小有关. (3)当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd和接收方通告窗口大小的最小值,但最少为2个报文段).此外,如果是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动). (4)当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免.如果cwnd <= ssthresh,则正在进行慢启动,否则正在进行拥塞避免.