TCP协议基础(一)
TCP为应用层提供的服务
提供进程和进程之间的通信
答: 怎么区分服务目的主机上的哪个进程呢? 通过提供端口号(well-known port),
如Telnet 23,DNS 53, HTTP 80, SMTP 25, FTP 21 22(数据,控制)
提供了面向连接的服务
答: 区别于UDP的面向报文,UDP是一个报文一个报文地传输到目的IP上,两端并不会
建立任何的连接,所以也是不可靠的,也是无序的,先后到达的顺序无法控制,也不会考虑
接收端的接收缓存,和应用进程的读取速度等等,很可能因为缓存溢出的丢弃到达的UDP报文,
所以不可靠!!!
TCP的面向连接,并不是建立一条真实的连接。而是建立一条虚链路! 并不是物理链路。
可以通过这条虚链路,进行有序的面向字节的传输,也就是一个字节一个字节这样的有序传输过去,
而且因为有序,所以当接收方因为期望收到的序号与接收到的序号不匹配,就说明有丢失,所以可以通过
这条虚链路实现 重传! 而UDP无法做到,所以可靠!
缓存机制
运行了TCP的两端,都有各自的发送缓存和接受缓存,可以模拟成一个环形的缓存。
发送缓存: 比如有三个字节是已发送的,后面的4个字节是已从应用进程中接收到但未发出去的,再后面的指针指向应用进程要写入的下一个空白区域(空的缓存块)。
当发送方收到已发送出去的报文的ACK确认后,就把那片缓存清空(回收),是可循环利用的空间。
问:是不是一发送出去就可以清空这片缓存?
答:不是?因为要保存这个副本,等待这段数据的ACK的确认,因为TCP具有重传机制,就是靠的这个缓存机制。
接受缓存:比如四个字节是已收到但未读取,并且有个指针指向下一个等待读取的缓存位置上。然后最后还有一个指针指向下一个要接收的位置。
全双工,就是两边都有发送缓存和接受缓存,所以两端可以同时进行发送和接收,是异步的,而不用同步停止等待。
分段传输
答:TCP的分段的概念就是,从缓存中读取字节出来组成一个报文段,加上首部,封装起来,传给IP层,加上IP首部发过去。因为不可能是每次一个字节这样发过去,效率太慢了,所以组成报文段。
复用和分用
TCP的特点
编号系统
序号
注意:TCP为每个要传输的字节进行编号,虽然传输的时候,是传输的报文段,但是实际上是根据字节来编号,而不是根据报文段来进行编号。
而且:一开始的序号是从0-65535中随机抽取一个数作为开始的数作为第一个字节的序号,
所以当接收方发来的确认号为4396,并不代表他已经接收了4395个字节,因为第一个字节序号是随机的!
确认号
接收方发送的确认号是指 接收方期待收到的下一个字节的编号。
并且是累积计算的,比如ACK_NUM = 4396, 表示已经收到了一开始到4395号字节,并对这一堆字节进行确认。而不是对第4395个字节的确认!
流量控制
依靠这个编号系统,可以使得 接收方能够对发送方进行流量的控制。
差错控制
差错控制使得TCP是可靠的,并且TCP提供的是面向字节的差错控制。
拥塞控制
发送方允许发送的数据受 接收方的缓存的影响,还要受到当前网络堵塞状况的影响
TCP协议基础(一)的更多相关文章
- HTTP/TCP协议基础
HTTP协议 基本概念 HTTP协议(超文本传输协议 HyperText Transfer Protocol):是用于从WWW服务器传输超文本到本地浏览器的传送协议.它不仅保证计算机正确快速地传输超文 ...
- TCP协议基础
IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议.通过使用IP协议,使Internet·成为一个允许连接不同类型 ...
- TCP协议基础知识及wireshark抓包分析实战
TCP相关知识 应swoole长连接开发调研相关TCP知识并记录. 数据封包流程 如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完 ...
- Http协议与TCP协议简单理解(转)
在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解.TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上 ...
- Http协议与TCP协议简单理解
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- Http协议与TCP协议理解
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- HTTP协议 与 TCP协议 的区别
TCP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据. TCP/IP和HTTP协议的关系,从本质上来说,二者没有可比性,我们在传输数据时,可以只使用(传输 ...
- iOS-----使用CFNetwork实现TCP协议的通信
使用CFNetwork实现TCP协议的通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个通信接口,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以 ...
- <再看TCP/IP第一卷>TCP/IP协议族中的最压轴戏----TCP协议及细节
题外话:刚刚过去的半个月实在是忙得我喘不过来气,虽然手里还压着几个项目得在期末考试之前做完,但是想想还是更新一下随笔,稍微换个心情.另外小吐槽一下那些在博客园里原封不动抄书当随笔的人,唉真是....算 ...
随机推荐
- HFUUOJ1023 闷声发大财 概率dp
题意 xyq有\(n\)个骰子,第\(i\)个骰子有\(a_i\)面,每次xyq都会把\(n\)个骰子搞一遍,其中的最小值作为结果,问最终结果的期望\(\mod (10^9+7 )\). 分析 lfx ...
- jQuery文档操作之克隆操作
语法: $(selector).clone(); 解释:克隆匹配的DOM元素 $("button").click(function(event) { //1.clone():克隆匹 ...
- Java中的Error和Exception
Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型. Excep ...
- Composer 安装 zlib_decode(): data error 错误
1.composer 安装一个组件(composer require topthink/think-worker) 报错如下 Failed to decode response: zlib_decod ...
- lcx用法
lcx使用方 本机IP:192.168.125.11 目标机IP:192.168.125.101 本机运行: lcx -listen 3333 2222 目标机运行:lcx -slave ...
- springboot @Configuration配置类里面使用@Value获取不到.yml配置文件属性的值
之前一个项目里面分为很多子工程的那种结构,要求让我改成一个项目的结构.我这边手动将代码合并之后出现下面的这种问题,然后尝试进行用各种方式解决 Error creating bean with name ...
- beta 2/2 阶段中间产物提交入口
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9961 组名:胜利点 组长:贺敬文 队员:位军营,徐丽君,彭思雨,王志文 g ...
- find 命令详细解释
命令格式:find pathname -options [-print -exec -ok ...] 命令参数: pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系 ...
- 使用Laravel首次运行出现 No application encryption key has been specified.
先观察Laravel根目录下是否有 .env文件,有则看1,无则看2 1.若直接报500错误: 输入命令: php artisan key:generate 2.若文件根目录下没有 .env文件 (1 ...
- 【React自制全家桶】五、React组件的生命周期函数详解
一.总览React组件的生命周期函数 什么是生命周期函数:简单的来说就是 在某个时刻会自动执行的函数 二.React的生命周期函数主要由四块组成 分别是:组件初始化.组件挂载.组件更新.组件卸载 三. ...