七层网络模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

五层网络模型

1. 应用层:确定进程之间通信的性质以满足用户需求。(各种传输协议)

2. 运输层:负责主机间不同进程的通信。(TCP/UDP)

3. 网络层:负责分组交换网中不同主机间的通信。

4. 数据链路层:负责将网络层的IP数据报组装成帧。

5. 物理层:透明地传输比特流。

四层网络模型:(TCP/IP分层模型)

1. 网络接口层:包括用于协作IP数据在已有网络介质上传输的协议。这样的协议提供TCP/IP协议的数据结构和实际物理硬件之间的接口。

2. 网间层:对应七层模型的网络层。本层负责数据的包装、寻址和路由。

3. 传输层:对应七层模型的传输层。本层提供两种端到端的通信服务。TCP提供可靠的数据流运输服务,UDP提供不可靠的用户数据报服务。

4. 应用层:对应七层模型的应用层和表示层。

TCP头部:

16位端口号:告知主机该报文段来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)。

32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号。(相当于数据在字节流上的字节偏移)

32位确认号:对另一方发送来的TCP报文段的相应。其值是收到的TCP报文段的序号值加1。

4位头部长度:标识该TCP头部有多少个32bit(4Byte)。

6位标志位:URG,ACK,PSH,RST,SYN,FIN

URG表示紧急指针是否有效

ACK表示确认号是否有效

PSH提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间

RST表示要求对方重新建立连接

SYN表示请求建立一个连接

FIN表示通知对方本端要关闭连接

16位窗口大小:告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据。

16位校验:

16位紧急指针:

注意点:

1. TCP包没有IP地址。这是IP层的任务。

2. 一个TCP连接需要4个元组(src_ip, src_port, dst_ip, dst_port)。准确的说是五元组,因为还包括一个协议。

3. 序号用来解决网络包乱序问题。

4. ACK用于确认收到,用来解决不丢包的问题。

5. 窗口,即滑动窗口,用于解决流控问题。

6. TCP Flag包类型,用于操控TCP的状态机。

TCP状态流转:

三次握手:SYN J(SYN_SEND),SYN K ACK J+1(SYN_RECV),ACK K+1(ESTABLISHED)

三次握手主要是初始化双方序号的初始值,作为以后数据通信的序号。

四次挥手:FIN M,ACK M+1 FIN N,ACK N+1

四次挥手是因为TCP传输是全双工的,所以双方都需要发送FIN和ACK。

TCP超时重传:

TCP传输的4种情况:数据顺利到达,顺利相应ACK;数据包中途丢失;数据包顺利到达,ACK中途丢失;数据包顺利到达,对端未响应或被丢弃。

TCP滑动窗口:(待补充)

TCP拥塞控制:(待补充)

基础知识——TCP协议的更多相关文章

  1. JAVA基础知识|TCP/IP协议

    虽然写代码也有一定的年头了,但是对于一些基础概念,还是很模糊.这在后来的学习过程中,带来了很大的痛苦,所以痛定思痛,决心重新学习这些概念.并把自己的理解和查询的资料做一些整合,便于以后查阅! 一.什么 ...

  2. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  3. 网络基础知识 tcp

    网络基础相关的知识(1)架构a. C / S架构: client客户端和server服务器端 优势: 能充分发挥PC机的性能b. B / S架构: browser浏览器和server服务器 隶属于C ...

  4. c++ 实时通信系统(基础知识TCP/IP篇)

    编写前的基础知识 C/S结构: C/S是Client/Server,即客户端/服务器端架构,一种典型的两层架构.客户端包含一个或多个在用户的电脑上运行的程序服务器端有两种,一种是数据库服务器端,客户端 ...

  5. 网络基础知识 - HTTP协议

    前传:HTTP协议的演变过程 HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是 ...

  6. 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议

    Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...

  7. JAVA基础知识|HTTP协议-发展历程

    HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 此文章为转载内容:http://www.ruanyif ...

  8. JAVA基础知识|HTTP协议-两个特性

    一.无连接 无连接:服务器与浏览器之间的一次连接只处理一个http请求,请求处理结束后,连接断开.下一次请求再重新建立连接. 然而随着互联网的发展,一台服务器同一时间处理的请求越来越多,如果依然采用原 ...

  9. 第二章 TCP/IP 基础知识

    第二章 TCP/IP 基础知识   TCP/IP  transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的.   ...

随机推荐

  1. 前端学习总结之——HTML

    近期在找工作参加面试,想总结一下学过的东西,也会持续更新遇到的新问题.盲点. 什么是HTML? 超文本标记语言(英语:HyperText Markup Language,简称:HTML),由尖括号包围 ...

  2. [日常填坑系列]CAP食用指南-版本引用问题

    一.前言 最近,由于好久没升级底层框架,一直用着netcore2.2版本,导致有些包没能更新到最新的版本,例如:CAP. 然而,在最近升级到CAP:3.1.2版本的时候,发现有点小坑,只能退回到CAP ...

  3. 【JavaWeb】Tomcat 使用

    Tomcat 使用 基础概念 JavaWeb: JavaWeb:所有通过 Java 语言编写可以通过浏览器访问的程序的总称,它是是基于请求和响应来开发的: 请求:客户端给服务器发送数据,即 Reque ...

  4. 剑指 Offer 16. 数值的整数次方

    实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 来源:力扣(LeetCode) 链接 ...

  5. 使用 C# 9 的records作为强类型ID - 初次使用

    强类型ID 实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体的ID的类型是一样的,比如都是整数的ID,这有可能会出现ID值传错的问题,看下边的示例. publi ...

  6. APP测试之Monkey测试

    一.简介 1.什么是Monkey测试? Monkey testing,也有人叫做搞怪测试.就是用一些稀奇古怪的操作方式去测试被测试系统,以测试系统的稳定性.Monkeytest,一般指这样的测试活动, ...

  7. MongoDB数据库,一些的筛选过滤查询操作和db.updae()更新数据库记录遇到的坑。

    缘由:使用MongoDB时遇到一些需要查询/更新操作指定某些字段的业务场景 查询和更新指定字段就需要进行简单的筛选和过滤,也能在大数据量时减少查询消耗时间 1. 查询数据库某些指定字段,同时默认返回_ ...

  8. Ice框架介绍

    概述 Ice是一个开源的综合性RPC框架,以高性能和原生支持微服务的架构而著称.提供了很多可以直接使用的组件,如注册中心IceGrid,部署工具IcePatch2,防火墙穿透Glacier2,发布订阅 ...

  9. [Usaco2006 Nov]Corn Fields牧场的安排

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

  10. apscheduler(定时任务) 基于redis持久化配置操作

    apscheduler(定时任务) 基于redis持久化配置操作 安装模块 pip install apscheduler 导入模块配置 ## 配置redis模块 from apscheduler.j ...