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协议及细节
题外话:刚刚过去的半个月实在是忙得我喘不过来气,虽然手里还压着几个项目得在期末考试之前做完,但是想想还是更新一下随笔,稍微换个心情.另外小吐槽一下那些在博客园里原封不动抄书当随笔的人,唉真是....算 ...
随机推荐
- PHP swoole TCP服务端和客户端
服务端 <?php $server = ,SWOOLE_PROCESS,SWOOLE_SOCK_TCP); $server->set(array( , )); $server->on ...
- Hadoop-No.8之时间戳
要获得良好的HBase的模式设计,要正确的理解和使用时间错.在HBase中,时间戳的作用如下所述. 时间戳决定了在put请求修改记录时那些记录更新 时间戳决定了一条记录的多个版本在返回时的排序 时间戳 ...
- Mybatis问题-Type interface com.zzu.ssm.dao.UserMapper is not known to the MapperRegistry
1. mapper.xml中namespace名称是否与dao接口包名一致 2. 在mybatis配置文件中注册mapper
- Confluence 6.15 博客页面(Blog Posts)宏
博客页面宏允许你 Confluence 页面中显示博客页面.通过单击博客的标题将会把你链接到博客页面中. 使用博客页面宏 为了将博客页面宏添加到页面中: 从编辑工具栏中,选择 插入(Insert) ...
- Codeforces 1167 E Range Deleting 双指针+思维
题意 给一个数列\(a\),定义\(f(l,r)\)为删除\(a\)中所有满足\(l<=a_i<=r\)的数后的数列,问有多少对\((l,r)\),使\(f(l,r)\)是一个 ...
- AcWing:109. 天才ACM(倍增 + 归并排序)
给定一个整数 MM,对于任意一个整数集合 SS,定义“校验值”如下: 从集合 SS 中取出 MM 对数(即 2∗M2∗M 个数,不能重复使用集合中的数,如果 SS 中的整数不够 MM 对,则取到不能取 ...
- 2.微服务开发框架——Spring Cloud
微服务开发框架—Spring Cloud 2.1. Spring Cloud简介及其特点 简介: Spring Cloud为开发人员提供了快速构建分布式系统中一些常见 ...
- truncate at 255 characters with xlsx files(OLEDB方式读取Excel丢失数据、字符串截断的原因和解决方法)
The TypeGuessRows setting is supported by ACE. Note the version numbers in the key may change depend ...
- LeetCode 23. 合并K个排序链表(Merge k Sorted Lists)
题目描述 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: ...
- Win10环境:使用VLC搭建RTSP服务器
VLC 是一款自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD.音频 CD.VCD 及各类流媒体协议.既可以作为客户端来播放远程视频,也可以作为RTSP服务器对外发布视频 ...