C++网络编程-tcpip协议

article/2025/9/27 14:54:04

目录

1 tcp/ip协议族

1.1 体系结构以及主要协议

1.2 封装

1.3 分用

1.4 测试网络

1.5 arp协议工作原理

1.6 dns工作原理

1.7 socket和tcp/ip协议族的关系

2 ip协议详解

2.1 ip服务特点

2.2 ipv4头部结构

2.3 ip分片

2.4 ip路由

3 tcp协议详解

3.1 tcp服务的特点

3.2 tcp头部结构

3.3 tcp连接的建立与关闭

3.4 tcp状态转移

3.5 复位报文段

3.6 tcp交互数据流

3.7 tcp成块数据流

3.8 带外数据

3.9 tcp超时重传

3.10 拥塞控制

4 TCP/IP通信案例:访问web服务器

部署代理服务器

访问dns服务器

本地名称查询

http通信 p60


1 tcp/ip协议族

1.1 体系结构以及主要协议

主要结构:数据链路层、网络层、传输层、应用层(4层结构)

数据链路层:

数据在物理媒介上的传输。

ARP(地址解析协议)、RARP(逆地址解析协议),实现了ip地址和机器物理地址之间的转换

网络层:

  • 数据包的选路和转发:ip协议。

  • ip协议选择下一跳路由器或者目标主机。

  • icmp协议:用于检测网络连接,8位类型+8位代码+16位校验和。

icmp差错报文:回应网络错误。目标不可达(3)、重定向(5)

查询报文:查询网络信息。如ping程序

使用循环冗余校验crc

传输层:

  • 为应用程序提供端到端的通信,主要有tcp、udp、sctp

  • tcp三次握手,可靠的、面向连接的、基于流的服务。

  • udp提供不可靠的、无连接的、基于数据包的服务。

  • sctp流控制传输协议,是为了因特网上传输电话信号而设计的。

应用层:

  • 处理应用程序的逻辑,在内核空间实现

  • ping、telnet、OSPF(最短路径优先)、DNS

1.2 封装

         

  • 发送端应用程序用send、write向tcp写入数据,内核中的tcp模块将数据与tcp内核发送到缓冲区,然后tcp模块调用ip模块的服务,将tcp报文段作为ip的数据部分。

  • udp不保存应用层数据副本,如果要重发就要将用户空间重新拷贝到udp内核发送缓冲区。

  • 帧最大传输单元mtu是46-1500字节,过长的会被分片传输。

1.3 分用

  • 帧到达目的主机后沿着协议自底向上的过程,就是复用。

  • 帧的头部用类型字段标识上层协议 arp、rarp、ip

  • ip数据报头部使用协议字段区分icmp、tcp、udp

  • TCP和udp使用头部的端口号区分上层报文

1.4 测试网络

1.5 arp协议工作原理

实现网络层地址到物理层地址的转换,ip-》mac。

主机向自己所在的网络广播一个arp请求,请求包含目标机器的网络地址。该网络上的其他机器收到后,被要求的机器会回应一个arp应答,包含物理地址。

  • arp请求应答报文

  • arp会维护一个高速缓存,包含经常访问的机器的ip地址到物理地址的映射。

1.6 dns工作原理

使用dns域名访问机器,而不是IP。

dns是分布式的域名服务系统,存有大量的机器名和ip的映射。使用dns协议向服务器查询。

1.7 socket和tcp/ip协议族的关系

  • 数据链路层、网络层、传输层是在内核实现,需要一组系统调用访问这些协议。api主要有:socket和xti。主要使用socket。

  • 功能:1、将应用程序数据从用户缓冲区复制到tcp/udp内核发送缓冲区,交付内核发送数据,如send。或者读取数据;2、通过它修改内核中各层协议的某些头部信息或其他数据结构,控制底层通信。

  • socket是一套网络编程接口,还可以访问其他网络协议栈。

2 ip协议详解

主要讨论:ip头部信息、ip数据报的路由和转发。

2.1 ip服务特点

  • 为上层协议提供无状态、无连接、不可靠的服务。

  • 无状态:上层收到的ip数据报可能是乱序的、重复的。简单、高效。

  • 无连接:不长久地维持对方的任何信息。每次都要指定对方的ip

  • 不可靠:ip协议不能保证ip数据报能准确到达接收端。

2.2 ipv4头部结构

2.3 ip分片

  • 传输过程中可能多次分片,在最终的机器上由ip模块重新组装

  • 以太网帧的MTU是1500字节,头部占用20字节,最多携带1480字节。

2.4 ip路由

IP协议的核心任务:数据包的路由,决定发送数据报到目标机器的路径。

  • ip模块工作流程:

  • 路由机制:

  • 路由表更新:

  • IP转发:

  • 重定向:

  • ipv6

3 tcp协议详解

关注:tcp头部信息、tcp状态转移过程、tcp数据流、tcp数据流的控制。

3.1 tcp服务的特点

  • 面向连接的、字节流、可靠传输

  • 一对一的,广播多播不适合使用tcp,可以使用udp

  • 面向字节流:写端多次写的会在缓冲区一次性发出;读端会将所有报文放到缓冲区通知应用程序读取。应用程序的读写次数和tcp模块的接收次数没有关系。

  • udp是每一次写操作都有一个udp数据包发送。接收端要及时每一次对一个udp进行读操作,否则会丢包。

3.2 tcp头部结构

  • 固定头部结构

  • 头部选项

3.3 tcp连接的建立与关闭

  

半关闭状态:当read系统调用返回0时即确认关闭。socket通过shutdown提供对半关闭的支持。

 连接超时

3.4 tcp状态转移

 

  • TIME_WAIT状态:客户端在接收到结束报文后等待2MSL(报文段最大生存时间)再完全关闭。可靠的终止tcp连接、保证让迟来的tcp报文段有足够的时间被识别丢弃(防止某端口又有新的连接进来导致报文被接收)。

  • 可以通过socket的SO_REUSEADDR强制进程立即使用处于TIME_WAIT状态的端口

3.5 复位报文段

某些情况会发送RST标志的报文段,通知关闭连接或重新建立连接。

  1. 访问不存在的端口

  2. 异常终止连接:发送后,发送端所有排队等待发送的数据都会被丢弃,使用socket的SO_LINGER

  3. 处理半打开连接:一端已经关闭了,另一端还维持着原来的连接。

3.6 tcp交互数据流

tcp报文段包含的应用程序数据按照长度分为交互数据和成块数据。交互数据只有很少的字节,对实时性比较高,如ssh、telnet。

一般可能会导致拥堵,可以使用nagle算法。通信双方任意时刻最多只能发送一个没被确认的TCP报文段。

3.7 tcp成块数据流

如FTP传输大文件,由于吞吐量大,tcp使用滑动窗口协议,允许发送方在停止发送前和等待确认前连续发送多个分组。即滑动窗口

3.8 带外数据

用于迅速告诉对方本端发生的重要事件。

  • udp没有带外数据。TCP利用头部的紧急指针标志和紧急指针字段,提供了紧急方式。

3.9 tcp超时重传

  • tcp模块为每个tcp报文段维护一个重传定时器,在报文段第一次被发送时启动,未收到应答就重新发送并重置定时器。

3.10 拥塞控制

  • 慢启动、拥塞避免、快速重传、快速恢复。

4 TCP/IP通信案例:访问web服务器

  • web客户端和服务器之间使用http通信。

部署代理服务器

  • 代理服务器分为正向、反向、透明代理器

    正向代理由客户端设置,请求发送到代理服务器;反向代理由服务端设置,由代理服务器转发到内部网络的服务器上;透明代理设置在网关,对于用户来说是透明的,因此属于正向代理的一种。

    通常会提供缓存目标资源的功能,如squid、varnish等软件

  • 代理服务器访问dns服务器查ip、代理服务器查询路由器mac地址和arp请求应答、wget客户端和代理服务器之间的http、代理服务器和web服务器之间的http

访问dns服务器

本地名称查询

http通信 p60

cookie


http://chatgpt.dhexx.cn/article/2VQkMBVm.shtml

相关文章

CSP绕过

01 比赛中常见的绕过CSP csp例子&#xff1a; <meta http-equiv"Content-Security-Policy" content"script-src self; object-src none; style-src cdn.example.org third-party.org; child-src https:">目前在比赛中常见的绕过 CSP 一般是: scri…

CS的使用

1&#xff09;首先创建服务端 命令&#xff1a;teamserver 192.168.71.130(主机IP) 123456&#xff08;随便设&#xff09; teamserver 192.168.71.130 123456 >/dev/null 2>&1 & (命令隐藏后台&#xff0c;jobs查看后台&#xff0c;客户端同理&#xff0c;在st…

C/C++Unix网络编程-IPC简介

IPC是进程间通信的简称。 进程、线程与信息共享 Unix进程间的信息共享的方式&#xff1a; (1) 左边的两个进程共享存留于文件系统中某个文件上的某些信息。为访问这些信息、每个进程都得穿越内核(例如read、write、lseek等)。当一个文件有待更新时&#xff0c;某种形式的同步…

CTP For Python

GitHub地址&#xff1a;https://github.com/shizhuolin/PyCTP 这是程序化期货交易上期ctp接口版本.将其包装为python版本. 支持python3 编译需求:vs2010/gcc 编译方法 python setup.py build PyCTP 编译方法 开发环境&#xff1a;windows 10 64bit, python 3.4.3 32bit, Visu…

CSP-S 2021

[CSP-S 2021] 括号序列 题目描述 小 w 在赛场上遇到了这样一个题&#xff1a;一个长度为 n n n 且符合规范的括号序列&#xff0c;其有些位置已经确定了&#xff0c;有些位置尚未确定&#xff0c;求这样的括号序列一共有多少个。 身经百战的小 w 当然一眼就秒了这题&#x…

CyberSploit:1

一、环境搭建 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/cybersploit-1,506/ 二、漏洞复现 探测靶机ip地址&#xff0c;得到靶机IP地址 nmap扫描服务以及端口&#xff0c;发现80和22端口 访问80端口&#xff0c;看到一个页面&#xff0c;查看源码未发现东西 …

[网络安全]dSploit-Android系统下的网络分析和渗透套件的使用

一、准备工作 一台已经获得root权限的安卓手机&#xff0c;并且安卓系统版本在 2.3 以上 busyBox 安装软件 下载地址 BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。&#xff3b;百度百科&#xff3d; 安装这个软件主要是为dsploit软件的运行提供 linux 中…

记一次无线渗透

用到的工具 一台root的安卓手机&#xff08;我这台手机刷了miui9&#xff09; Csploit 安卓渗透神器 下载地址&#xff1a;https://github.com/cSploit/android/releases Kali meterpreter 当然你有Kali的Nethunter设备更好 开始测试 利用万能钥匙找一波wifi&#xff0c;运气好…

为网络安全红队方向提供的资源,工具大合集(渗透测试)

这是一份必备的资源大合集&#xff0c;收录了最优秀的网络安全红队方向&#xff08;渗透测试&#xff09;的资源和工具。 &#xff08;文末领取读者福利&#xff09; 无论您是初学者还是专业人士&#xff0c;都能从中获得所需的技能和知识。 在这个信息化时代&#xff0c;网络…

如何在网站中插入视频

&#xfeff;&#xfeff; 很多新手站长在往自己网站里&#xff0c;添加土豆优酷等视频网站里的视频时&#xff0c;会遇到一些麻烦,珊珊在这里向大家介绍一种简单方法. 1.首先要找到要插入的视频&#xff0c;如下图点击分享给朋友右侧的小按钮. 2.点击按钮后弹出一个窗口点击复…

Word中轻松插入本地视频

场景 在Word文档中插入视频 实现 新建或打开Word文档 找到上面插入菜单栏&#xff0c;点击并选择对象 点击后选择PPT 点击确定 此时会打开PPT&#xff0c;然后再选择上面的插入 选择插入下的视频选项&#xff0c;然后选择PC上的视频 选择视频后点击插入 可以调整视频大小 …

如何在html里插入视频

第一步&#xff1a;首先下载video.js&#xff0c;百度一下就能找到。 这个是下载后的目录。 第二步&#xff1a;先把要用到的js\css\swf都加载到html页面上。 如&#xff1a; 第三步&#xff1a;加入下面的代码&#xff1a; <video id"my_video_1" class"…

制作往图片里插入视频,视频添加到图片上播放

在视频中还有个小视频同时播放&#xff0c;这种画中画的效果以前都学习过&#xff0c;那在图片上插入视频播放&#xff0c;可以用媒体梦工厂中的画中画功能来制作吗&#xff1f;这个肯定是可以的了。下面就来看看怎么的操作的吧。 先来看看图片加视频制作出来的画中画效果 制作…

插入视频--使用<video>标签为网页添加视频

使用方法 举例 显示结果 在网页上添加视频和添加音频的标签属性用法相同。 讲解 1.autoplay:如果出现该属性&#xff0c;则视频在就绪后马上播放。 2.controls:如果出现该属性&#xff0c;则向用户显示控件&#xff0c;比如播放按钮。 3.loop:如果出现该属性&#xff0c;…

视频剪辑工具,如何批量在图片中插入视频

怎么批量在图片中插入视频呢&#xff1f;其实这是一种很常见的效果&#xff0c;那么这种效果是怎么制作的呢&#xff1f;下面随小编一起来操作。 所需工具 多张图片、视频素材 操作步骤 运行媒体梦工厂&#xff0c;将图片导入画中画板块中的“底画”中&#xff0c;多张图片&…

教你给视频画面任意位置插入GIF图

视频怎么添加GIF图片呢&#xff1f;如何在视频任意位置添加的呢&#xff1f;其实很简单。教你这个简单的剪辑方法。一起来试试吧。 准备工具&#xff1a; 视频素材及动图 下载一个视频剪辑高手 开始操作&#xff1a; 运行软件登录上&#xff0c;在多种功能上选择“批量剪辑视…

计算机word如何提交,如何在word添加视频?

您可以从计算机或Internet添加视频以直接在Word文档中播放。 此功能使您(或与您共享文档的人)可以直接观看视频而无需离开文档。 将视频添加到Word文档 将离线视频(或计算机存储中的视频)添加到Word文档的不利之处在于&#xff0c;它们只能在您的PC上播放。 如果您将文档发送给…

如何在html网页中插入视频(以及让视频自动播放的问题)

直接进入正题&#xff1a; 关于视频的插入可使用 video标签 如下图 简单介绍下用到的几个属性 class定义了video类 在style中调整这个类的长度和高度属性&#xff1b; src处引入视频的链接&#xff1b; controls属性&#xff1a;允许用户控制视频的播放&#xff0c;包括音…

HTML插入视频和音频

一、插入视频 src表示视频来源位置 height表示视频高度 autoplay表示视频自动播放 loop表示循环播放 controls表示进度控制条 muted表示静音播放 poster表示视频封面所用的图片路径 video/mp4表示视频的格式 例如&#xff1a; <video src"images\sp1.mp4&quo…

如何在html中加入视频

第一步&#xff1a;首先下载video.js&#xff0c;百度一下就能找到。 这个是下载后的目录。 第二步&#xff1a;先把要用到的js\css\swf都加载到html页面上。 如&#xff1a; <link href"video-js/video-js.css" rel"stylesheet" type"text/css&qu…