Flow Control

sliding window protocol : TCP uses Sliding Window Protocol (SWP) for segments flow control and segment level error control

congestion control

https://www.zhihu.com/topic/19614026/hot

http://blog.csdn.net/yusiguyuan/article/details/39013895

http://www.ictshore.com/free-ccna-course/transmission-control-protocol-advanced/

http://network.51cto.com/art/201410/453744.htm

https://community.emc.com/thread/194901

https://blog.packet-foo.com/2015/03/tcp-analysis-and-the-five-tuple/

http://blog.csdn.net/wdscq1234/article/category/6240857/2

http://kb.cnblogs.com/page/209100/

http://kb.cnblogs.com/page/209101/

http://packetbomb.com/category/text/

https://sharkfest.wireshark.org/assets/presentations/B5%20-%20TCP%20Analysis%20-%20First%20Steps.pdf

https://www.ibm.com/support/knowledgecenter/ssw_i5_54/rzaku/rzaku.pdf

https://juliorestrepo.files.wordpress.com/2015/04/wireshark-network-analysis-second-edition.pdf

The “Top 10” Issues

  1. Packet loss

  2. Client, server and wire latency

    1. Window scaling issues (RFC 1323)

    2. Service response issues and application behavior

  3. Network design issues (wired/wireless)

    1. Path issues (such as QoS)
  4. Itty Bitty Stinking Packets (Low MSS Value)

    1. Fragmentation

    2. Timing problems

  5. Interconnecting devices

一个TCP连接需要四个元组来表示是同一个连接(src_ip, src_port, dst_ip, dst_port)准确说是五元组,还有一个是协议。但因为这里只是说TCP协议,所以,这里我只说四元组。

  • 注意上图中的四个非常重要的东西:
    • Sequence Number 是包的序号,用来解决网络包乱序(reordering)问题。
    • Acknowledgement Number 就是ACK——用于确认收到,用来解决不丢包的问题
    • Window又叫Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的
    • TCP Flag,也就是包的类型,主要是用于操控TCP的状态机的

mss

Most operating systems will look for the interface MTU and set the TCP MSS accordingly. For example, Ethernet has a MTU of 1500 bytes.

The IP and TCP header are 20 bytes each, so that's 40 bytes in total. 1500 - 40 = 1460 bytes so that's your TCP MSS.

The maximum size of an IP packet is 65535 bytes so theoretically, you could set the TCP MSS to 65535 - 40 = 65495 bytes. It's unlikely to see this though, since you exceed the interface MTU you will have to fragment these way too big IP packets before you can send them.

TCP/IP模型很成功,其设计已经经得起多年的磨练。无奈,TCP/IP协议族是很繁杂的一个模型,为了全面理解它,宜采取先全局后局部的庖丁解牛式。本文从应用的角度试着去理解TCP/IP的全貌,配合例子加以讲解。  本文目的:
  巩固自己这方面的知识,作为深入TCP/IP协议族的基础。
  本文内容:
  1. TCP/IP协议族组成
  从字面上理解,TCP/IP协议族只有TCP、IP协议,其实不然。其真正的名字是Internet协议族 (Internet Protocol Suite) 。和大型软件一样,其分为四层:应用层、传输层、网络层、链路层。
  每一层的功能和目的都是不一样的,每一层上服务的协议也不是有区别的。从上往下看:
  应用层(产生|利用数据)
  协议:FTP、HTTP、SNMP(网管)、SMTP(Email)等常用协议;
  职责:利用应用层协议发送用户的应用数据,比如利用FTP发送文件,利用SMTP发送Email;由系统调用交给运输层处理。
  运输层(发送|接收数据)
  协议:TCP(有连接)、UDP(无连接);
  职责:负责建立连接、将数据分割发送;释放连接、数据重组或错误处理。
  网络层(分组|路由数据)
  协议:IP、ICMP(控制报文协议)、IGMP(组管理协议);
  职责:负责数据的路由,即数据往哪个路由器发送。
  链路层(按位发送|接收数据)
  协议:以太网卡设备驱动、令牌网卡驱动程序、ARP、RARP等;
  职责:负责传输校验二进制用户数据。
  从可靠性角度看各层区别:
  网络层IP协议是不可靠的协议,为此,如果其上面的层也不做任何特殊处理,也将是不可靠的。于是,运输层的TCP协议弥补了这个空缺,提供有连接的、可校验的数据传输服务。
  应用层的话可对数据进行加密之类的处理,增强的是传输数据的安全性,如https。
  链路层可对数据进行校验。
  从运行进程态看各层区别:
  应用层运行在用户程序进程中,属性用户态;
  其他层则在系统内核进程运行,属于核心态;
  从通信方式上看各层区别:
  传输层是端对端的通信,也就是说,处理的是进程与进程之间的通信,如两个TCP进程;
  网络层是点对点的通信,也就是说,处理的是机器之间的 逻辑连接。
  从传输数据单元上看区别:
  传输层上形成的是TCP或UDP报文段;
  网络层形成的是IP数据报;
  数据链路层形成的是帧(Frame)。
  从寻址方式上看各层区别:
  网络层通过IP寻址;
  链路层通过MAC寻址。
  注解:
  ICMP: 供IP用于发送错误报文,也可由应用层直接调用;
  IGMP: 用于多播(Multicast),比如,UDP可用多播IP地址往多个目标主机发送数据报,就是依靠它。
  ARP&RARP: 用户在IP地址与MAC地址互相转换。
  2. TCP/IP模型基础设施
  IP地址
  共分五类地址,分别如下:
  A类:0.  0. 0. 0——127.255.255.255(单播)
  B类:128.0.0.0——191.255.255.255(单播)
  C类:192.0.0.0——223.255.255.255(单播)
  D类:224.0.0.0——239.255.255.255(多播)
  E类:240.0.0.0——247.255.255.255(待用)
  附加类:255.255.255.255 (传输层UDP广播)
  MAC地址
  每个网卡的MAC地址世界唯一,不可变;计算机通信其实靠的是MAC地址,而不是IP地址,请看下面注解。
  端口
  端口在硬件里的名称为接口,跟网卡的入口一样;在软件概念里,可以理解为一些数据结构数据缓冲区。
端口可分为:
  知名端口:0001——1023 (例如FTP 20,TCP 21,UDP 69)
  临时端口:1024——5000
  预留端口:5000——65535
  假设你的应用程序需要端口,一般是从临时端口分配,只在应用程序运行时有效,故称临时端口。
  传输层可将进程与端口进行绑定,当数据到来时,其知该往哪个进程缓冲区里送。
  注解:
  IP与MAC的区别:IP地址是基于网络拓扑结构的,是动态可变的。MAC地址是由网卡厂商定的,是终身不可变且唯一的。假设应用层利用MAC地址传输数据,那么其是不灵活的,因为它不能变。所以,应用层用IP寻址。
  但是,硬件又必须用MAC才能找到机器,为此引入ARP及RARP来做两地址的查询与转换。
  3. TCP/IP应用案例分析
  场景:左边用户利用FTP客户端与右边FTP服务器端进行连接上传文件。
  数据将从上往下流,每到一层都会加上层头,数据以类堆栈形式存储,到目标机器时,底层数据先得,由底向上,符合堆栈先进后出的特性。
  步骤1:应用层准备好数据文件,调用Windows API通知传输层TCP建立连接,传输层加入TCP包头,其中包含标识应用层协议的标识符——端口 21。
  步骤2:网络层接收了传输层的TCP包,由于IP协议可接收ICMP(1)、IGMP(2)、TCP(6)、UDP(17)来的数据,其需要一个标识域来表明是那个协议发来的数据。此数据域将加于IP包头中。除此之外,还将赋以IP地址。
  步骤3:数据链路层接收网络层来的数据后,加之标识域表明数据是从IP、ARP或RARP来。然后,加上MAC地址往外发送。
  步骤4:将数据由网卡送出,送的过程中,ARP利用目标IP找到最近的路由器MAC地址,然后将包发往它,之后由它找到一个路由器,最终将数据包送到右边机器的网卡中。
  步骤5:根据包头的标识域可知这是一个IP数据包,利用IP协议拆包。
  步骤6:根据包头的标识域可知这是一个TCP包,利用TCP协议拆包。
  步骤7:根据包头的端口号,将数据直接送入应用层的对应缓冲区中,应用程序负责解析数据包,做相应的业务逻辑处理。
  注解:
  RFC(Request for Comment):各种Internet的正式标准都以RFC文档形式发布。
  各种协议文档:RFC 1122是链路层、网络层、传输层的文档;RFC 1123是应用层的文档;RFC 1600是各种Internet协议的标准化现状

results matching ""

    No results matching ""