面向连接的传输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网络传输"粘包"问题 ...
随机推荐
- window10下Docker安装
首先window版本必须是10,如果是win7那么安装方法有所不同,win10是官方支持安装的.笔者安装的是Community社区版,版本信息如下: 1.去docker官网下载win10安装包: ht ...
- SqlAlchemy操作(三)
1.基于SQLALCHEMY建表 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Colu ...
- jzoj5710
對於每個詢問,我們先考慮插入1~r中每個數的答案,這樣子就不用考慮後面數對現在的影響 那麼我們可以在權值線段樹的每一個位置存儲每一個值最後一次結束的位置 問題變成了,如何判斷區間連續? 我們可以對線段 ...
- 服务器 apache配置https,http强制跳转https(搭建http与https共存)
公司linux服务器上的nginx的已经改成https了,现在还剩下一个windows云服务器没配置. 环境 windows wampserver2.5 64位 1.腾讯云申请的ssl 包含三个文件: ...
- Mybatis的cache
相关类:org.apache.ibatis.executor.CachingExecutor 相关代码: public <E> List<E> query(MappedStat ...
- webpack快速入门——如何安装webpack及注意事项
1.window+R键,输入cmd打开命令行工具,输入 mkdir XXXX(XX:文件夹名): 2.cd XXX 进入刚刚创建好的文件夹里,输入cnpm install -g webpack (安装 ...
- servlet转发与重定向区别
servlet转发与重定向 HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParam ...
- .Net - WebApi
WebApi C#进阶系列 - WebApi: WebApi 服务监控 + log4net:
- MiniUi中ComboBox与Autocomplete的区别
ComboBox 下拉选择框与Autocomplete的区别: 1,ComboBox只在页面加载时加载一次,发送一次请求: 2,Autocomplete会根据用户输入的值动态的去发送请求加载数据:
- ajax--底层代码
ajax:Asynchronous JavaScript And XML,异步的js与XML.ajax并不是一种新的编程语言,而是一种使用现有标准的新方法.ajax能够在不重载整个网页的情况下与服务器 ...