tcp协议

什么是TCP拥塞控制算法?

一世执手 提交于 2020-03-22 23:44:08
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用在以响应时间来限流的中间件上。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。 本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。 TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。 TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制作用于整体网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。 拥塞算法需要 掌握其状态机和四种算法 。拥塞控制状态机的状态有五种,分别是: "Open,Disorder、CWR、Recovery和Loss状态" 。四个算法为 "慢启动,拥塞避免,拥塞发生时算法和快速恢复" 。 Congestion Control State Machine 和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个ACK时,Linux TCP通过状态机的状态来决定其接下来的行为

TCP 拥塞控制算法简介

ⅰ亾dé卋堺 提交于 2020-03-22 15:26:46
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。  本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。  TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。  TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。  拥塞算法需要掌握其状态机和四种算法。拥塞控制状态机的状态有五种,分别是Open,Disorder,CWR,Recovery和Loss状态。四个算法为慢启动,拥塞避免,拥塞发生时算法和快速恢复。 Congestion Control State Machine  和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个Ack时,Linux TCP通过状态机(state)来决定其接下来的行为

TCP通信

♀尐吖头ヾ 提交于 2020-03-22 08:00:49
1、TCP概述 TCP(Transmission Control Protocol):传输控制协议,是一种面向连接的协议。 TCP不同于UDP,TCP严格区分客户端和服务器端,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以去主动连接客服端,并且服务器端程序需要事先启动,等待客户端的连接。 在jdk中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个Socket类,用于表示客户端。 通信时,首先创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器发送连接请求,服务器端相应请求,两者建立开始通信。 2、ServerSocket ServerSocket类的构造方法: ServerSocket(int port):创建绑定到特定端口的服务器套接字。 常用方法: Socket accept():侦听并接受到此套接字的连接。 InetAddress getInetAddress():返回此服务器套接字的本地地址。 3、Socket Socket类构造方法: Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。 Socket(InetAddress address, int port)

TCP的滑动窗口与拥塞窗口

五迷三道 提交于 2020-03-22 06:19:01
一、滑动窗口 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。 对ACK的再认识,ack通常被理解为收到数据后给出的一个确认ACK,ACK包含两个非常重要的信息: 一是期望接收到的下一字节的序号n,该n代表接收方已经接收到了前n-1字节数据,此时如果接收方收到第n+1字节数据而不是第n字节数据,接收方是不会发送序号为n+2的ACK的。举个例子,假如接收端收到1-1024字节,它会发送一个确认号为1025的ACK,但是接下来收到的是 2049-3072,它是不会发送确认号为3072的ACK,而依旧发送1025的ACK。 二是当前的窗口大小m,如此发送方在接收到ACK包含的这两个数据后就可以计算出还可以发送多少字节的数据给对方,假定当前发送方已发送到第x字节,则可以发送的字节数就是y=m-(x-n).这就是滑动窗口控制流量的基本原理. 滑动窗口协议如图所示: 在这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口,它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动

TCP/IP网络层级结构及其应用服务(一)

烂漫一生 提交于 2020-03-22 05:45:45
1.计算机网络体系结构 相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。 • “协调”衍生出网络体系结构 • 定义:层次结构和各层协议的集合 计算机网络是采用层次性的结构模型,将网络分为若干层次,每个层次负责不同的功能。 每一个层次中通信双方都要共同遵守相应的约定,我们将这个约定叫做协议。 各功能层之间,上一层向下一层提出服务的要求,下一层则完成上一层提出的要求。 物 理层 为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性 – 机械特性:主要定义物理连接的接插装置的形状和尺寸、引脚数量和排列、固定和锁定装置等等。 – 电气特性 :规定传输二进制位时,线路上信号的电压高低范围、阻抗匹配、传输速率和距离限制。 – 功能特性 :主要定义各条物理线路的功能(如某一电平表示何种意义)。 – 规程特性 :主要定义各条物理线路的工作规程和事件的时序关系 数 据链 路 层 在两个相邻结点间的线路上,无差错的传送以帧为单位的数据帧(FRAME)。 MAC地址: 网 络层 选择合适的网间路由和交换结点,确保数据及时传送 。 IP报文: IP地址A,B,C,D,E五类地址。 子网掩码: 传 输层 根据通信子网的特性最佳的利用网络资源,并以可靠和经济的方式,为两个端系统(也就是源站和目的站)的会话层之间,提供建立、维护和取消传输连接的功能,负责可靠地传输数据。

Android网络通信之Socket

微笑、不失礼 提交于 2020-03-22 04:59:09
在移动APP开发中。网络通信数据传输是必定存在的。移动APP离开了网络通信数据传输的功能方式,就好比一潭死水,永远都 是原来的样子。 提到网络通信传输数据。首先出如今程序猿脑海中的是HTTP协议传输,然而要深沉次的挖掘HTTP协议的传输原理, 那么久会有一个Socket的长连接数据传输的方式。HTTP协议数据传输,分为Get、POST两种请求方式,而Socket长连接也有两种方 式,一种是TCP协议的传输方式,还有一种是UDP协议的传输方式。在此。我觉得Socket的理解例如以下: 一、 Socket定义: Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层。它是一组接口。在设计模式中, Socket 事实上就是一个门面模式, 它把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面。对用户来说,一组简单的接口就是所有,让 Socket 去组织数据,以符合指定 的协议。 二、基于TCP/IP协议的Socekt 1、 使用 Socket 实现client的步骤; 1 、通过 IP 地址和port实例化 Socket, 请求连接server 2 、获取 Socket 上的流以进行读写 3 、把流包装进 BufferReader/PrintWriter 的实例 4 、对 Socket 进行读写 5 、关闭打开的流 创建server的步骤: 1

理解TCP/IP三次握手与四次挥手的正确姿势

岁酱吖の 提交于 2020-03-21 13:59:58
背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次。 从好上开始,到现在,一年多也算坚持下来了。 问题 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声音,过一会儿之后才会恢复。 中间双方可能就要不断的确认网络是否恢复,但是有时候会: 她:“你可以听到了吗?” 我:“可以了,你呢?”、 她:“喂喂,你可以听到了吗?” 我:“可以了,我可以听到了,你呢?” 她:“你可以听到了吗?” ..... 这种情况很蛋疼,那么怎样才能找一个简单的办法,让两个人都确认自己可以听到对方的声音,对方也可以听到自己的声音呢? 注:以下情节纯属虚构 方案 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6。 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手只是确保可靠的基本需要。 举个日常例子,打电话时我们对话如下: 对应为客户端与服务器之间的通信: 于是有了如下对话: 我:1+1等于几? 她:2,2+2等于几? 我:4 首先两个人约定协议 1.感觉网络情况不对的时候,任何一方都可以发起询问 2.任何情况下,若发起询问后5秒还没收到回复,则认为网络不通 3.网络不通的情况下等1min路由器之后再发起询问 对于我而言,发起 “1+1等于几”的询问后 1. 若5s内没有收到回复

TCP、UDP和HTTP关系

∥☆過路亽.° 提交于 2020-03-21 03:49:20
3 月,跳不动了?>>> 先来一个讲TCP、UDP和HTTP关系的 http:是用于www浏览的一个协议。 tcp:是机器之间建立连接用的到的一个协议。 1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。 因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。 2、HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协 议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。 HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。 另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只 是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1

TCP程序开发步骤

南笙酒味 提交于 2020-03-20 23:42:27
TCP是面向连接的协议,需要通信双方首先建立一个连接。因为TCP可靠、稳定的特点,它被应用于大部分场合,但它对系统资源要求比较高。 TCP协议服务端程序的开发流程如下所示。 // 初始化Winsock库,获得协议版本 // 创建服务Socket对象 (指定协议类型,地址族信息) // 绑定Socket (将指定的IP,端口绑定给Socket) // 开始监听,并且设置监听数量. (开始监听后,客户端就可以连接成功) // 开启端口,接收连接 // 收发数据(利用建立连接的Socket对象进行通信) // 关闭Socket连接 // 终止Winsock库的调用 开发一个TCP服务端程序,在完成 初始化Winsock库 和 创建套接字(Socket)对象 两个通用步骤后,还要完成如下步骤。 (1)绑定套接字到指定IP地址和端口 无论是使用哪种协议的服务端程序,都要将服务端的IP地址和端口绑定给先前创建的套接字,客户端程序将与之进行通信。绑定套接字的函数是bind,原型如下。 int bind( SOCKET s, //套接字句柄 const struct sockaddr FAR *name, //要绑定的地址 int namelen //name所指定的地址长度 ); 第一个参数s是要绑定地址的套接字句柄,由socket函数返回。 第二个参数name是指向sockaddr结构体的指针

TCP协议中的三次握手和四次挥手

懵懂的女人 提交于 2020-03-20 20:54:24
3 月,跳不动了?>>> 首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP( 是根据 IP地址 获取 物理地址 的一个 TCP/IP协议 )在第二层——Data Link层;在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。 同时,我们需要简单的知道,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封装的过程。 在OSI七层模型中,每一层的作用和对应的协议如下: TCP连接的建立(三次握手) 客户端发送(主动)一个SYN给服务端(相当于告诉服务端,我要打开连接了,你注意一下)。客户端的状态变化:CLOSED–> SYN_SENT,服务端状态变化:CLOSED–>LISTEN; 服务端收到SYN报文,发送SYN+ACK两个报文给客户端,其中ACK报文是对客户端发来的SYN报文的确认(相当于告诉客户端,我收到你的连接请求了)。而这里的SYN报文则是服务端主动给客户端发送的请求连接报文(相当于告诉客户端,我要和你建立连接了,你注意一下)。服务端的状态变化:LISTEN–>SYN RECEIVED,客户端的状态无变化 客户端收到服务端的SYN