面向连接的传输TCP(一)
这篇博客主要是对计算机网络自顶向上做的阅读笔记,深入地了解TCP
一、TCP连接
1.特点:
a.TCP是面向连接的,因为一个进程在向另一个进程进行数据传输之前必须先要握手,即要互相发送报文,以确认信息传输的参数。并且连接时双方都要初始化一些参数和状态变量
b.TCP协议只能在端系统中运行,中间路由器对TCP完全视而不见
c.TCP是全双工服务。如果A到B存在TCP连接,那么数据可以从A流向B,也可以从B流向A
d.点对点,也就是说他不能像UDP那样多播,不能从一个发送方送给多个接收方
2.TCP连接的建立
当一个主机上的进程想要与另一个主机的进程建立起连接。则发起请求的一方称为客户端,另一个就是服务端。
发起请求(python): clientServer.connect((serverName,serverPort))//ServerName标识了服务器名称,serverPort标识端口
然后客户端向服务器发送TCP报文段,服务器用另一段报文段来响应,最后客户再用三个特殊的报文段来响应。前两个报文段不承载有效数据,第三个报文段可以承载有效数据。由于发送了三个报文段,TCP连接这种过程被称为三次握手。(TCP报文段就是TCO的数据加上首部信息形成的)
3.传输数据
建立起连接之后就可以互相发送数据了,当数据到达TCP的传送门之后,TCP会把数据放到它的发送缓存中,就由TCP控制它什么时候把信息取出来。TCP从发送缓存取出数据大小受限于MSS(报文段里应用层最大数据)。MSS通常为1460字节(首部占40字节)
TCP报文段在IP中传输,会封装到IP的数据报中,然后被发送到网络中,当TCP在另一端收到这个报文段。报文段的数据就会进入TCP缓存
二、TCP的报文段
可以看出TCP报文段是由首部和数据组成的,应用数据受限于MSS,TCP发送文件,会把数据划分为几个MSS(最后一个通常小于MSS),而首部看起来信息就很多了,比起UDP来说字段就多了很多,了解报文段字段的作用,我们就能够进一步深入了解TCP能够给传输层带来什么。
1.源端口和目的端口
和UDP一样TCP也提供了多路分解和多路复用。
我们都知道传输层就是通过套接字来传递数据的,套接字是由IP+端口组成的。
多路分解就是将运输层的数据传输给正确的套接字:在源主机上从不同的套接字收集信息。
多路复用就是将信息加上首部打包好生成报文段之后传递到网络层的过程。所以TCP包含源和目的端口,这样才能保证多路分解和多路复用。
2.检验和字段
这个同UDP一样包括检验和字段。用来提供差错检测
3.序号字段和确认号字段
这两个字段是TCP报文中最重要的两个字段,使TCP能提供了可靠数据传输
序号字段:就是把数据分段,然后标序号
假如A要从B发送数据流,包含500000字节,MSS长度为1000字节,那么TCP要为这个数据构建500个报文段,并分配序号,第一个序号0,第二个序号1000,第三个序号2000。
确认号:一个主机A填充的想要下一次从主机B接收到的下一个字节的序号。因为TCP是全双工的,从A发送到B的同时也要从B接收到数据,如果意外丢包,能够通过确认号发现。
既然序号和确认号这么重要,那我们来看一个简单的案例吧。
假设客户发送了字符C,并喝起了咖啡,那么客户端和服务端之间会发生什么呢,假设初始化客户端和服务端序号42和79.
第一次握手:用户序号42(也就是该报文段数据的首字节),确认号79(也就是希望服务器应答的序号是79),数据段中包含‘C’(这是一种捎带)
第二次握手:服务器发送报文段,它有两个目的,确认他收到的数据,第二个目的回显字符'C',所以它在确认号填入43,,序号79(这是起始的序号),数据端里填入的是字符C
第三次握手:确认号80(因为79及以前的字节流已经收到),序号43,它的唯一目的就是确认已经收到服务器的数据,此时数据段没有数据
4.接收窗口字段
用于流量控制,指示接收方愿意接收到的字节
5.首部长度
由于TCP长度可变,该字段由于指示TCP报文段长度
6.选项字段
指示发送方和接收方协商的MSS
7.标识字段
ACK用于指示确认字段是有效的,RST、SYN\FIN用于连接建立和拆除。PSH被设置时,指示接收方应立即将数据交给上层,URG指示报文段中有紧急数据
面向连接的传输TCP(一)的更多相关文章
- [计算机网络-传输层] 面向连接的传输:TCP
参考:http://blog.csdn.net/macdroid/article/details/49070185 在学习TCP之前我们先来看一下可靠数据传输需要提供什么样的机制: ·差错检测机制:检 ...
- 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP
由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...
- 网络传输--TCP
TCP网络编程 一.TCP简介 二.TCP网络程序--客户端 三.TCP网络程序--服务端 四.TCP知识总结 五.文件下载案例 六.3次握手和4次挥手 回到顶部 一.TCP简介TCP 1.TCP的简 ...
- 文件传输——TCP/IP协议介绍总结
一.链路层 数据链路层的工作特性: 1.为IP模块发送和接收IP数据报2.为ARP模块发送ARP请求和接收ARP应答(ARP:地址解析协议,将IP地址转换成MAC地址)3.为RARP发送RARP请求和 ...
- Java实现TCP之Echo客户端和服务端
Java实现TCP之Echo客户端和服务端 代码内容 采用TCP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- socket创建TCP服务端和客户端
看情况选择相对应的套接字*面向连接的传输--tcp协议--可靠的--流式套接字(SOCK_STREAM)*面向无连接的传输--udp协议--不可靠的--数据报套接字(SOCK_DGRAM) 在liun ...
- Java实现UDP之Echo客户端和服务端
Java实现UDP之Echo客户端和服务端 代码内容 采用UDP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- 4-socket套接字编程
socket套接字编程 目标:根据socket模块提供的接口函数,进行组合使用完成基于tcp或者udp的网络编程. 套接字:完成上述目标的一种编程手段,编程方案. 套接字分类: 流式套接字(sock_ ...
- 网络TCp数据的传输设计(黏包处理)
//1.该片为引用别人的文章:http://www.cnblogs.com/alon/archive/2009/04/16/1437599.html 解决TCP网络传输"粘包"问题 ...
随机推荐
- IOS - IPhone或IPAD,如何恢复出厂操作系统?
IPhone或IPAD的操作系统都是IOS,如果IPhone或IPAD越狱,或其它原因导致不能正常使用了,恢复出厂设置能够得到一个可以正常工作的设备.恢复的方法也比较简单,就是用iTunes,一般情况 ...
- Kafka迁移与扩容工具用法
1.迁移topic到新增的node上 假如现在一个kafka集群运行三个broker,broker.id依次为101,102,103,后来由于业务数据突然暴增,需要新增三个broker,broker. ...
- 用absolute进行页面的自适应布局
用position:absolute和top,left,bottom,right进行设置可以进行页面的头部,底部,左边框,内容的自适应布局,可以代替position:fixed; <!DOCTY ...
- [题解]luogu P4116 Qtree3
终于来到了Qtree3, 其实这是Qtree系列中最简单的一道题,并不需要线段树, 只要树链剖分的一点思想就吼了. 对于树链剖分剖出来的每一根重链,在重链上维护一个Set就好了, 每一个Set里存的都 ...
- webstorm 添加css前缀(兼容)自动添加
Webstorm自动添加css前缀( 兼容) 百度了很多在webstorm中添加css前缀(兼容)自动添加,autoprefixer插件是首选,对于基本的css,还有less都支持,所以就选择了aut ...
- (转)python 之路,200行Python代码写了个打飞机游戏!
原文:https://www.cnblogs.com/alex3714/p/7966656.html
- HttpComponents组件探究 - HttpClient篇
在Java领域,谈到网络编程,可能大家脑海里第一反应就是MINA,NETTY,GRIZZLY等优秀的开源框架.没错,不过在深入探究这些框架之前,我们需要先从最original的技术探究开始(当然,需要 ...
- 【转】使用SQL Server 2012的FileTable轻松管理文件
一 .FileStream和FileTable介绍 我们经常需要把结构化数据(int.Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢? 1. 在SQL Se ...
- Scope及其子类介绍
之前写的文章: 关于作用域范围Scope Scope及相关的子类如下: 同时有些Scope还继承了Scope.ScopeListener类,如下: 1.StarImportScope及ImportSc ...
- 前端通信:ajax设计方案(三)--- 集成ajax上传技术
在此之前让我感慨一下现在的前端开发的氛围.我遇到好多人,给我的观念都是,这个东西这个框架有了,那个东西那个框架做了,前端嘛,学几个框架,这个拼凑一下那个拼凑一下就好了.其实我想问,东西都框架做了,那你 ...