zoukankan      html  css  js  c++  java
  • Linux高性能服务器编程:TCP/IP协议详解

    IP头部信息:出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

    IP数据报的路由和转发:IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。它们决定数据报是否应该转发以及如何转发。

    1. IP服务的特点

    IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。

    无状态是指IP通信双方不同步传输数据的状态信息,所有的IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。

    无连接是指IP通信双方都不长久地维持对方的任何信息,上层协议每次发送数据的时候,都必须明确指定对方的IP地址。

    不可靠是指IP协议不能保证IP数据报准确地到达接收端,只是承诺尽最大努力。

    2. IPV4头部结构

    长度通常为20个字节。

    4. IP路由

    IP路由机制:

    1. 查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到,就使用该路由项,没找到转2;

    2. 查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址。如果找到,就使用该路由项,没找到转3;

    3.选择默认路由项,意味着数据报的下一跳路由是网关。

    5. IP转发

    路由器都能执行数据报的转发操作,而主机一般只发送和接收数据报。

    TCP头部信息:出现在每个TCP报文段中,用于指定通信的源端端口号、目的端端口号,管理TCP连接,控制两个方向的数据流。

    TCP状态转移过程:TCP连接的任意一端都是一个状态机。在TCP连接从建立到新开的整个过程中,连接两端的状态机将经历不同的状态变迁。

    TCP数据流:

    TCP数据流的控制:超时重传和拥塞控制。

    字节流的概念:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系。

    TCP传输时可靠的:首先采用发送应答机制,发送端发送每个TCP报文段都必须得到接收方的应答。TCP协议采用超时重传机制,发送端发送出一个TCP报文段之后启动定时器,如果在

    定时时间内未收到应答,将重发该报文。

    TCP固定头部结构:(20字节)

    16位端口号:源端口,目的端口。

    32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号。后续TCP报文段中序号值为ISN加上所携带数据的第一字节在整个字节流中的偏移。

    32位确认号:用作对另一方发送来的TCP报文段的响应。值是收到的TCP报文段的序号值加1.

    4位头部长度

    16位窗口大小:是TCP流量控制的一个字段,告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据。

    16位校验和:

    16位紧急指针

    TCP:半关闭状态

    TCP连接是全双工的,允许两个方向的数据传输被独立关闭。通信的一端可以发送结束报文段给对方,告诉它本端已经完成了数据的发送、但允许继续接收来自对方的数据,

    直到对方也发送结束报文段以关闭连接。此种状态为半关闭状态。

    TCP状态转移图:

    服务器端状态转移:

    服务器通过listen系统调用进入LISTEN状态,被动等待客户端连接,因此执行的是所谓的被动打开,服务器一旦监听到某个连接请求(收到同步报文段),就将该连接放入内核等待队列中,

    并向客户端发送带SYN标志的确认报文段。此时该连接处于SYN_RCVD状态,如果服务器成功接收到客户端发送回的确认报文段,则该连接转移到ESTABLISHED状态。ESTABLISHED状态是

    连接双方能够进行双向数据传输的状态。

    当客户端主动关闭连接时(通过close或shutdown系统调用向服务器发送结束报文段),服务器通过返回确认报文段使连接进入CLOSE_WAIT状态,这个状态的含义很明确:等待服务器应用程序

    关闭连接。服务器检测到客户端关闭连接后,也会立即给客户端发送一个结束报文段来关闭连接。这将使连接转移到LAST_ACK状态,以等待客户端对结束报文段的最后一次确认。一旦确认,连接会彻底关闭。

    客户端状态转移:

    客户端主动关闭时,将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态,此时客户端接收到服务端专门用于确认目的的确认报文段,则连接转移到FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,

    服务器处于CLOSE_WAIT状态,若此时服务器也关闭连接,则客户端给予确认并进入TIME_WAIT状态。

    TIME_WAIT状态:

    客户端在接收到服务器的结束报文段之后,并没有直接进入CLOSED状态,而是转移到了TIME_WAIT状态,客户端要等待一段长为2MSL(报文最大生存时间)的时间,才能完全关闭。

    可靠的终止TCP连接;

    保证让迟来的TCP报文段有足够的时间被识别并丢弃

    复位报文段:

    访问不存在的端口;

    异常终止连接;

    处理半打开连接。

    TCP超时重传:

    TCP模块为每一个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动,如果超时时间内为收到对方的应答,TCP模块将重传TCP报文段并重置定时器。

    拥塞控制:

    提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。

    拥塞控制有四个部分:慢启动、拥塞避免、快速重传和快速恢复。

  • 相关阅读:
    Python定时任务sched(一)
    Python使用selenium进行爬虫(一)
    有关在python中使用Redis(二)
    有关JSOUP学习分享(一)
    jsoup爬虫,项目实战,欢迎收看
    有关在python中使用Redis(一)
    俄罗斯方块代码
    Android !No Launcher activity found!错误
    让jar程序在linux上一直执行(转)
    MyEclipse打包jar 并加入第三方包
  • 原文地址:https://www.cnblogs.com/sssblog/p/12367444.html
Copyright © 2011-2022 走看看