计算机网络之传输层 下(TCP)
1. TCP的特点
特点:它是一个点到点的通信机制,只能有一个发送方和一个接收方;它提供是一个可靠的,按序的字节流机制;使用流水线机制,通过拥塞控制和流量控制的机制设置窗口尺寸;发送方和接收方都有缓存;它是一个全双工,能双向传输数据的面向连接的通信,通信双方必须在发送数据之前建立连接,连接状态只能在连接的两端维护,不能在沿途的结点维护状态。
2. TCP的段结构

源地址端口,目的端口地址;
序号(TCP传输保证连接性,发送的每个字节都要编上号),确认号(接收方期望从对方接受的字节编号。如果报文段的接收方成功的接受了对方发过来的编号x的字节,那么返回x+1作为确认号,确认号可以和数据捎带一起发送。)
控制:定义了6中不同的控制位或者标志位:URG:紧急数据标志位,ACK:确认标志位,PSH:请求推送位,接收端应尽快把数据传送给应用层,RST:连接复位,通常,如果TCP收到的一个分段明显不属于该主机的任何一个连接,则向远程发送一个复位包,SYN:建立连接,让连接双方同步序列号,FIN:释放连接
检验和:TCP的使用检验和是强制性的,UDP使用检验和是可选的。在计算检验和是报文段要附加相同的伪首部,对于TCP来说伪首部的协议字段的值是6
序列号和ACK

3. TCP可靠数据传输
TCP在IP层提供的不可靠服务基础上实现的可靠数据传输,使用流水线机制,累积确认机制,单一的重传计时器。触发重传的事件:超时,收到重复的ACK。
那么如何设置定时器的超时时间?


4. TCP发送方的事件

5. TCP接收方时间
收到 一个连续的段,等待最多500ms,看有没有下一个段,否则发送ACK,
收到乱序的段,立刻发送重复的ACK。
6. 快速重传机制
TCP实现中,如果发生超时时间,超时时间间隔会重新设置,即将超时时间间隔加倍,导致其很大,重发丢失分组的时间会等待很久的时间。
可以通过重复ACK检测检测分组丢失,Sender收到同一个数据的3个ACK,则假定该数据之后的段已经丢失,即在定时器超时之前进行重传。
7. TCP流量控制
接收方为TCP连接分配buffer

如果上层应用处理buffer中的数据较慢,发送方在这个机制下发送方不会传输的太多太快以至于淹没接收方(buffer溢出)
实现的时候就是Received在Segment的头部字段中将RcvWindow告诉Sender,Sender限制自己发送的但还没收到ACk的数据不超过接收方的空闲RECWindow的尺寸。
但是如果Received告知Sender RcvWindow=0是,发送方仍然可以发送一个很少的数据段,从而更新RcvWindow的值
8. TCP连接管理
1.TCP的三次握手

step1:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x(随机数);
step2:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置ACK为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;
step3:客户端收到服务器的SYN+ACK报文段。然后将ACK设置为y+1,向服务器发送ACK报文段,
为什么需要三次握手?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
2.TCP的四次挥手


为什需要四次挥手?
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
9. 为什么TCP采用随机初始序列号?
在TCP的三次握手中,后采用随机产生的初始化序列号进行请求,这样做主要是出于网络安全的因素着想。如果不是随机产生初始序列号,黑客将会以很容易的方式获取到你与其他主机之间通信的初始化序列号,并且伪造序列号进行攻击,这已经成为一种很常见的网络攻击手段。
10. TCP的TIME_WAIT状态和CLOSE_WAIT状态
1.为什么存在TIME_WAIT状态:可靠的实现TCP的全双工连接的终止,允许老的重复segment在网络中消逝。
2.TIME_WAIT为什么要等待2MSL:等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。所以当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃,让所有本次连接的报文段在网络中消失。
3.被动关闭的一方收到FIN包后,协议层回复ACK;然后被动关闭的一方,进入CLOSE_WAIT状态。如果服务器程序TCP连接一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在对方关闭连接之后服务器程序自己没有进一步发出ack信号。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直 被程序占着。
计算机网络之传输层 下(TCP)的更多相关文章
- 【计算机网络】-传输层-Internet传输协议-TCP
[计算机网络]-传输层-Internet传输协议-TCP TCP介绍 在不可靠的互联网上提供一个可靠的端到端字节流 面向连接的.可靠的.端到端的.基于字节流的传输协议 TCP位置 TCP服务模型 应用 ...
- UNIX网络编程---传输层:TCP、UDP、SCTP(二)
UNIX网络编程----传输层:TCP.UDP.SCTP 一.概述 本章的焦点是传输层:包括TCP.UDP.和SCTP(流控制传输协议).SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令. ...
- 传输层:TCP 协议
传输层:TCP 协议 一.概述 TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同.TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点: (1) TCP 提供 可靠的 数据传 ...
- 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点
上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- 传输层之TCP
---恢复内容开始--- 坞无尘水槛清,相思迢递隔重城. 秋阴不散霜飞晚,留得枯荷听雨声. --李商隐 上一篇中我们了解了socket编程是基于TCP或者UDP,所以我们有必要对TCP,和UDP ...
- 【计算机网络】-传输层-Internet传输协议-UDP
[计算机网络]-传输层-UDP 简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,UserDatagram Protocol) .UDP为应用程序提供了一-种无需 ...
- 计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105532044 学习课程:<2019王道考研计算机网络> 学习目的 ...
- 计算机网络之传输层(传输层提供的服务及功能概述、端口、套接字--Socket、无连接UDP和面向连接TCP服务)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105451022 学习课程:<2019王道考研计算机网络> 学习目的 ...
随机推荐
- hdoj5842【水题】
比赛的时候还特别撒比地写了二分的那个写法,然后wa了一发,因为这个集合的翻译成自然数集.还是转换了一下,还是去写了一个二分. 后面就是出现几种就是多长... 比赛的真的非常非常挫的code-. #in ...
- CodeForces 687C【DP】
题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合 ...
- 第十篇 .NET高级技术之委托
委托是一种可以指向方法的数据类型,可以声明委托类型变量. 声明委托的方式:delegate返回值类型 委托类型名(参数) 比如delegate void MyDel(int n) 注意这里的除了前 ...
- Win10各个版本免费激活密钥
专业版:W269N-WFGWX-YVC9B-4J6C9-T83GX 企业版:NPPR9-FWDCX-D2C8J-H872K-2YT43 家庭版:TX9XD-98N7V-6WMQ6-BX7FG-H8 ...
- 用JS改变页面中b标签的样式啊 样式的等
用JS改变页面中b标签的样式啊 样式的等 ,实际上是在标签内加上样式 ,用媒体查询的话 ,不能生效 <!DOCTYPE html> <html lang="en&qu ...
- websocket实现单聊
server# @File: ws from flask import Flask, request, render_template from geventwebsocket.handler imp ...
- 一个Nice的生活主题博客模板
https://www.bitcron.com/ https://api.bitcron.com/ https://chopstack.com/
- Contextual Action bar(3) 两个示例
一.通过activity启动Context Action Bar 1.主java public class ActivityActionModeFrgmt extends Fragment imple ...
- [未读]JavaScript高效图形编程
去年买来就一直搁置,因为是js游戏相关,暂时还用不到.
- 04.NopCommerce启用MiniProfiler调试
最近在调试NopCommerce的时候,常遇到一个地址不知道请求哪个路由(比如http://localhost/apparel-shoes,比如http://localhost/login)您能快速说 ...