TCP传输层详解(计算机网络复习)
介绍:TCP/IP包含了一系列的协议,也叫TCP/IP协议族,简称TCP/IP。该协议族提供了点对点的连接机制,并将传输数据帧的封装、寻址、传输、路由以及接收方式都予以标准化
TCP/IP的分层模型
在讲TCP/IP协议之前,首先介绍一下七层ISO模型:

| 七层框架 | 通信协议 |
| 应用层 |
http、smtp、snmp、ftp、telent、sip、ssh、nfs等 |
| 表示层 | xdr、asn.1、smb、afp、ncp等 |
| 会话层 | ASAP、ssh、rpc、netbios、asp、winsock、bsd socket等 |
| 传输层 | tcp、udp、tls、rtp、sctp、spx、atp、IL等 |
| 网络层 | ip、icmp、igmp、ipx、bgp、ospe、rip等 |
| 数据链路层 | 以太网、HDLC、令牌环、帧中继、ISDN等 |
| 物理层 | 铜缆、网缆、光缆、无线电等 |
TCP/IP协议是互联网最基本的协议,在一定程度上参考了七层ISO模型,有些复杂,所以在TCP/IP协议中的七层被简化为四个层次。

1、TCP\IP协议的应用层
应用层包含所有和应用程序协同工作并利用基础网络交换应用程序的业务数据的协议。一些特定的程序被认为运行在这个层上,该层协议所提供的服务能直接支持用户应用。应用层协议包含HTTP(万维网服务)、ftp(文件传输)、smtp(电子邮箱)、ssh(安全远程登录)、dns(域名解析)等诸多协议。
2、TCP/IP协议的传输层
(1)传输层的协议解决了端与端连接提供传输服务。
(2)这种传输服务分为可靠和不可靠的,其中TCP就是可靠传输、udp是不可靠传输。
(3)为端与端连接提供流量控制、差错控制、服务质量等管理服务。
传输层主要有两个性质不同的协议:tcp(控制传输协议)和UDP(用户数据协议)。
TCP那边有一个接受数据的缓存区,通过这个缓存可以解决以下两个问题:
- 流量控制:接收端可以通过控制缓存区的大小来控制发送端的发送速率,从而避免发送端发送过快导致接收端无法处理的情况。
- 确认机制:接收端可以将已经接收到的数据存放在缓存区中,等待后续的数据到达,当接收到后续的数据时,可以通过确认机制通知发送端已经接收到了哪些数据,从而保证数据的可靠传输。
而UDP是一个无连接的数据报协议,它没有缓存区,实现不了TCP上面的功能,UDP的主要目的是尽力传递,其不需要搞这些复杂的操作,所以其传输效率是最高的。
3、TCP/IP协议的网络层
TCP/IP协议网络层的作用是在复杂的网络环境中为要发送的数据报找到一个合适的路径进行传输。简单来说,网络层负责将数据传输到目的地址,目的地址可以是多个网络通过路由器连接而成的某一地址。路由转发应该也是由该层完成。网络协议的代表包括ICMP、IP、IGMP等。
4、TCP/IP协议的链路层
链路层有时也被称为数据链路层或网络接口层,用来处理连接网络的硬件部分。该层既包括操作系统硬件的设备驱动、NIC(网卡)、光纤等物理可见部分,也包括连接器等一切传输媒介。在这一层中,数据的传输单位为bit(比特)。其主要协议有ARP、RARP等。
HTTP报文传输原理
利用TCP/IP进行网络通信时,数据包会按照分层顺序与对方进行通信。发送端从应用层往下走,接收端从链路层往上走。从客户端到服务端的数据,每一帧的传输顺序都为应用层->传输层->网络层->链路层->链路层->网络层->传输层->应用层。

接下来为大家介绍一下数据封装和分用。
数据通过互联网传输时不可能是光秃秃的不加标识(数据会乱),所以在发送数据时需要加上特定的标识(数据封装),在使用数据时候在去掉特定标识(数据分用)。


1、TCP报文格式

源端口号:
(1)源端口号表示报文的发送端口,占16位。源端口号和源ip地址组合起来,可以标识报文的发送地址。
(2)目的端口号表示报文的接收端口,占16位。目的端口号和目的IP地址相结合,可以标识报文的接收地址
(3)序号,TCP传输过程中,在发送端出的字节流中,传输报文中的数据部分的每一个字节都有它的编号。序号占32位,发起方发送数据时,都需要标记序号。
序号的语义与syn控制标志(Control bits)的值有关。根据控制标志中的SYN来表示不同的序号含义:
当syn=1时,为连接建立阶段
当syn=0时,为数据传输正式开始时,第一个报文的序号为isn+1,后面的报文序号为前一个报文的SN值+TCP报文的净荷字节数(不包含TCP头)。如果发送端发送的一个TCP帧的净荷为12B,序号为5 ,则发送端接着发送下一个数据包时,序号的值应该为5+12=17。
在数据传输中,tcp通过序号来对上层提供有序的数据流。
(4)确认序号标识了报文接收端期望接收的字节序列。如果设置了ACK控制位,确认序号的值表示下一个准备接收的包的序号码。举个例子


(5)头部长度,该字段占4位,用来表示tcp报文的首部长度。
(6)保留字段,暂时没什么用。
(7)控制标志占6位,具体的标志位为URG、ACK、psh、rst、syn、fin
(8)窗口,长度为16位,共两个字节,用来进行流量控制的。
(9)校验和长度位16位,共两个字节,对整个tcp报文段,即tcp头部和tcp数据进行校验和计算,接收端用于对收到的数据包进行验证。
(10)紧急指针,长度16位,共两个字节,是一个偏移量,和sn序号值相加表示紧急数据最后一个字节的序号。
以上10项内容是TCP报文首部必需字段,也叫固有字段,长度为20字节。接下来就是可选项和填充部分。
2、TCP的三次握手
TCP连接建立时,双方需要经过三次握手;断开连接时,双方需要经过四次挥手。
通常情况下,建立连接的双方由一端监听来自请求方的TCP连接,当服务端监听开始时,必须准备好接受外来的连接,在java中该操作通过创建一个ServerSocket服务监听套接字实例来完成。此操作会调用操作系统(如linux)c代码的三个函数socket()、bind()、listen()来完成
服务端伪代码如下:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
try {
ServerSocket socket=new ServerSocket(8080);
while (true){
Socket socket1=socket.accept();
//开启线程进行连接的IO操作
ServerThread thread=new ServerThread();
thread.start();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
客户端伪代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
public static void main(String[] args) {
try {
Socket socket =new Socket("localhost",8080);
//写入给监听方的输出流。
OutputStream os=socket.getOutputStream();
//读取监听方的输入流
InputStream inputStream=socket.getInputStream();
} catch (UnknownHostException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
(1)第一次握手:Client进入SYN_SENT状态,发送一个SYN帧来主动打开传输通道,该帧被设置为1
(2)第二次握手:Server在收到SYN帧之后,会进入SYN_RCVD状态,同时返回SYN+ACK帧给client。
(3)第三次握手:Client在收到Server的第二次握手SYN+ACK确认帧之后,首先将自己的状态从SYN_SEND变成ESTABLISHED,表示自己的放向的连接通道已经建立成功。

3、TCP的四次挥手

TCP传输层详解(计算机网络复习)的更多相关文章
- 第6章 传输层(详解TCP的三次握手与四次挥手)
第6章 传输层 传输层简介 传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测.流量控制和验证功能.TCP/IP传输层包含很多有用的协议,能够提供数据在网络传输所需的必要寻址信 ...
- 网络编程之TCP/IP各层详解
网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...
- 计算机网络(三),TCP报文段详解
目录 1.TCP(Transmission Control Protocol传输控制协议)作用 2.TCP报文段详解 三.TCP报文段详解 1.TCP(Transmission Control Pro ...
- TCP/IP协议详解概述
TCP/IP协议详解卷1--第一章概述--读书笔记 作者:vpoet 日期:2015/06/25 注:本系列的文章只是作者对TCP/IP协议的理解,难免会出现纰漏或者不完整,当然也有可能很肤浅,希望大 ...
- 【转载】TCP /IP协议详解
首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...
- TCP、UDP详解与抓包工具使用
参考:https://www.cnblogs.com/HPAHPA/p/7737641.html TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间 ...
- TCP /IP协议详解【转】
转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...
- OSI模型各层详解
1. OSI概述 1.1 模拟器说明 1.1.1 模拟器的作用 搭建实验环境进行测试. 1.1.2 模拟器的类型 PT:一般是学校中使用,命令不完整,且不能抓包 GNS3:思科(CCNA,CCNP), ...
- [转]TCP滑动窗口详解
TCP滑动窗口详解 http://lyjdamzwf.blog.163.com/blog/static/75206837201193373226/ TCP滑动窗口(Sliding Window) ...
- TCP/IP协议详解---概述
工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本 ...
随机推荐
- 使用 KubeBlocks 为 K8s 提供稳如老狗的数据库服务
原文链接:https://forum.laf.run/d/994 大家好!今天这篇文章主要向大家介绍 Sealos 的数据库服务.在 Sealos 上数据库后端服务由 KubeBlocks 提供,为用 ...
- ENVI+ERDAS实现Hyperion叶绿素含量反演:经验比值法、一阶微分法
本文介绍基于ENVI与ERDAS软件,依据Hyperion高光谱遥感影像,采用经验比值法.一阶微分法等,对叶绿素含量等地表参数加以反演的具体操作. 目录 1 前期准备与本文理论部分 1.1 几句闲谈 ...
- java与es8实战之四:SpringBoot应用中操作es8(无安全检查)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<java与es8实战>系 ...
- Python字符串操作函数split()和join()
字符串拆分 在python中有切片(Slice)操作符,可以对字符串进行截取,还提供了split()函数可以将一个 字符串分裂成多个字符串组成的列表.在使用split()函数来拆分字符串之前,我们先来 ...
- git + docker + docker-compose + Jenkins+Linux 自动化构建、部署、测试过程
Jenkins三大概念: Job:即为任务 插件:maven构建项目.git拉取代码.ssh插件 工作空间:任务的存储空间,即为git代码的存储空间 开发者在本地开发,然后提交到 Source Res ...
- SpringBoot打成jar运行后无法读取resources里的文件
开发一个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版文件放到 resources 下 在开发环境中通过下面方法能读取word_r ...
- iOS16新特性:实时活动-在锁屏界面实时更新APP消息
简介 之前在 <iOS16新特性:灵动岛适配开发与到家业务场景结合的探索实践> 里介绍了iOS16新的特性:实时更新(Live Activity)中灵动岛的适配流程,但其实除了灵动岛的展示 ...
- Journey -「CQOI 2021」
Day -1 Thu. & Fri. 恰逢学校运动会,于是向班主任申请了不去,然后就在机房坐着.不美好的事情可能就是文化课老师还留了这两天的作业,不过-> 一旦放弃了作业,什么都好说了呢 ...
- 低代码引擎 TinyEngine 正式发布!
在当今数字化飞速发展的时代,企业对高效.敏捷的应用程序需求日益旺盛.为了满足这一需求,越来越多的低代码开发平台开始涌现.这些平台通过提供简单易用的开发工具和优化后的开发流程,帮助开发者快速构建高质量. ...
- 其它——MyCat实现分库分表
文章目录 MyCat实现分库分表 一 开源数据库中间件-MyCat 二 MyCat简介 三 MyCat下载及安装 3.1 MySQL安装与启动 3.2使用docker启动多个数据库 3.3 MyCat ...