介绍: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那边有一个接受数据的缓存区,通过这个缓存可以解决以下两个问题:

  1. 流量控制:接收端可以通过控制缓存区的大小来控制发送端的发送速率,从而避免发送端发送过快导致接收端无法处理的情况。
  2. 确认机制:接收端可以将已经接收到的数据存放在缓存区中,等待后续的数据到达,当接收到后续的数据时,可以通过确认机制通知发送端已经接收到了哪些数据,从而保证数据的可靠传输。

而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传输层详解(计算机网络复习)的更多相关文章

  1. 第6章 传输层(详解TCP的三次握手与四次挥手)

    第6章 传输层 传输层简介 传输层为网络应用程序提供了一个接口,并且能够对网络传输提供了可选的错误检测.流量控制和验证功能.TCP/IP传输层包含很多有用的协议,能够提供数据在网络传输所需的必要寻址信 ...

  2. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  3. 计算机网络(三),TCP报文段详解

    目录 1.TCP(Transmission Control Protocol传输控制协议)作用 2.TCP报文段详解 三.TCP报文段详解 1.TCP(Transmission Control Pro ...

  4. TCP/IP协议详解概述

    TCP/IP协议详解卷1--第一章概述--读书笔记 作者:vpoet 日期:2015/06/25 注:本系列的文章只是作者对TCP/IP协议的理解,难免会出现纰漏或者不完整,当然也有可能很肤浅,希望大 ...

  5. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

  6. TCP、UDP详解与抓包工具使用

    参考:https://www.cnblogs.com/HPAHPA/p/7737641.html TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间 ...

  7. TCP /IP协议详解【转】

    转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...

  8. OSI模型各层详解

    1. OSI概述 1.1 模拟器说明 1.1.1 模拟器的作用 搭建实验环境进行测试. 1.1.2 模拟器的类型 PT:一般是学校中使用,命令不完整,且不能抓包 GNS3:思科(CCNA,CCNP), ...

  9. [转]TCP滑动窗口详解

    TCP滑动窗口详解  http://lyjdamzwf.blog.163.com/blog/static/75206837201193373226/ TCP滑动窗口(Sliding Window)   ...

  10. TCP/IP协议详解---概述

        工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本 ...

随机推荐

  1. Django视图与网址进阶

    1. 采用/add/?a=4&b=5这样get方法进行 1)修改learn/views.py文件 代码: #增加新函数 def add(request): a=request.GET['a'] ...

  2. 2、搭建MyBatis

    2.1.开发环境 IDE:idea 2019.2 构建工具:maven 3.8.4 MySQL版本:MySQL 5.7 MyBatis版本:MyBatis 3.5.7 MySQL不同版本的注意事项 ( ...

  3. devops之Python编程-类的基础架构

    Python中,可以通过关键字class来定义一个类.类是一种自定义数据类型,它可以包含属性(变量)和方法(函数).下面是一个示例: class MyClass: def __init__(self, ...

  4. 如何使用io_uring构建快速响应的I/O密集型应用?

    本文分享自华为云社区<如何使用io_uring构建快速响应的I/O密集型应用>,作者: Lion Long . 当涉及构建快速响应的I/O密集型应用时,io_uring技术展现出了其卓越的 ...

  5. 图解 LeetCode 算法汇总——链表

    本文首发公众号:小码A梦 一般数据主要存储的形式主要有两种,一种是数组,一种是链表.数组是用来存储固定大小的同类型元素,存储在内存中是一片连续的空间.而链表就不同于数组.链表中的元素不是存储在内存中可 ...

  6. Solution Set -「ARC 109」

    「ARC 109A」Hands Link. 讨论即可,除了煞笔出题人写了个死马的题面. #include<cstdio> #include<algorithm> using n ...

  7. apollo多环境部署

    一.环境准备 jdk : 1.8+         mysql  5.6.5+ 二.安装包下载 https://github.com/ctripcorp/apollo/releases 下载如下三个压 ...

  8. 【python爬虫】爬虫所需要的爬虫代理ip是什么?

    前言 在进行爬虫程序开发时,经常会遇到访问被限制的网站,这时就需要使用代理 IP 来进行访问.本文将介绍代理 IP 的概念及使用方法,帮助读者更好地应对爬虫程序中的访问限制问题.同时,本文还将提供一些 ...

  9. FreeSWITCH容器化问题之rtp端口占用

    操作系统 :CentOS 7.6_x64.debian 11 (bullseye,docker) FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 FreeSWITCH容器化带 ...

  10. Django框架——forms组件、cookie与session

    文章目录 1 forms 组件 1 校验字段功能 2 渲染标签功能 渲染方式1 渲染方式2 渲染方式3 3 渲染错误信息功能 视图 模板 4 组件的参数配置 5 局部钩子 6 全局钩子 2 cooki ...