当前位置: 首页 > news >正文

学习unix网络编程第二章

文章目录

  • 1.总图
  • 2.概述
    • 2.1 ipv4
    • 2.2ipv6
    • 2.3.TCP(传输控制协议)
    • 2.4UDP( 用户数据报协议)
    • 2.5SCTP(流控制传输协议)
    • 2.6 ICMP(网际控制消息协议)
    • 2.7 IGMP(网际组管理协议)
    • 2.8 ARP(地址解析协议)
    • 2.9 RARP(反向地址解析协议)
    • 2.10 ICMPv6(网际控制消息协议版本6)
    • 2.11 BPF(BSD分组过滤器)
    • 2.12 DLPI(数据链路提供者接口)
  • 3.三次握手与四次挥手
  • 4.time_wait状态
  • 5.端口号
  • 6.并发服务器
  • 7.TCP端口号与并发服务器,缓冲区大小限制,TCP/UDP输出机制

传输层:TCP、UDP和SCTP

1.总图

在这里插入图片描述
BPF : 伯克利分组过滤器,该接口提供对于数据链路层的访问能力,通常可以在源自Berkerly的内核中找到。
DLPI : 数据链路提供者接口,该接口也提供对于数据链路层的访问能力,通常随SVR4内核提供。
IGMP : 用于多播,在IPv4中可选。
ICMPv6: ICMPv6综合了ICMPv4,IGMP,和ARP的功能。

2.概述

2.1 ipv4

网际协议版本4(internet protocol version 4)常称为ip,IPv4地址长度为32位,每个IP地址都由网络号和主机号组成。

网络号:唯一的标识了一条物理链路或逻辑链路,对于该链路相连的所有设备来说网络号部分是共同的。
主机号:唯一标识了该链路上连接的具体设备。

给TCP、UDP、SCTP、ICMP、IGMP提供分组递送服务

2.2ipv6

网际协议版本6(internet protocol version 6)常称为ip,使用128位地址,每个IP地址都由网络号和主机号组成。
给TCP、UDP、SCTP、ICMP、IGMP提供分组递送服务

2.3.TCP(传输控制协议)

1、特点:面向连接,排序,支持重传,为用户进程提供可靠的全双工字节流,流套接字(socket)
2、面向连接:TCP提供客户与服务器之间的连接,TCP客户首先与某个给定服务器建立一个连接,然后跨该连接与那个服务器交换数据,然后终止该链接。
3、TCP含有动态估算客户和服务器之间的往返时间RTT的算法。
4、提供流量控制:TCP总是告知对方在任何时刻他一次可以从对方接收多少字节的数据,这称为滑动窗口。在任何时刻,该窗口指出接收缓冲区中当前可用空间的量,从而确保发送端发送的数据不会使得接收缓冲区溢出。该窗口时刻动态变化,当接收到TCP报文的时候,窗口减小,当TCP客户端读取报文的时候,该窗口增大。当TCP对应某个套接字的接收缓冲区已满,它必须等待应用从该缓冲区中读取数据,方能从对方接收数据。因此,操作系统为每一个套接字保留一个窗口。
5、TCP不能被描述成100%可靠的协议,它提供的是数据的可靠传递或故障的可靠通知

2.4UDP( 用户数据报协议)

特点:无连接协议,数据报套接字
UDP不保证UDP数据包会到达其最终目的地,不保证各个数据包按序达到,不保证不重复到达,所有可靠性交给应用层保证。UDP数据包拥有记录边界,如果一个数据包正确的到达其目的地,那么该数据报的长度将随数据一起传递给接收短应用进程。而TCP是一个字节流协议,没有任何记录边界

2.5SCTP(流控制传输协议)

特点:面向消息,可靠,排序,流量控制,全双工,多宿
面向消息:提供对各个记录的按序递送服务,与UDP一样,由发送端写入的每条记录的长度随数据一道传递给接收端应用。
多宿:SCTP能够在所链接的端点之间提供多个流,每个流各自可靠的按序递送消息。一个流上某个消息的丢失不会阻塞同一关联其他流上消息的递送。这种做法正好与TCP相反,TCP连接中若发生错误将会阻塞随后的数据传送直至错误被修复。

2.6 ICMP(网际控制消息协议)

处理在路由器和主机之间流通的错误和控制消息:
ICMP协议主要用来检测网络通信故障和实现链路追踪,最典型的应用就是PING和tracerooute。

PING:
通过发送回送请求报文和回送回答报文来检测源主机到目的主机的链路是否有问题,目的地是否可达,以及通信的延迟情况。

traceroute:
通过发送探测报文来获取链路地址信息。第一个探测报文TTL为1,到达第一个路由器时,TTL减1为0所以丢掉这个探测包,同时向源主机发回ICMP时间超过报文,这时源主机就获得了第一个路由器的IP地址;接着源主机发送第二个探测报文,TTL增1为2,到达第一个路由器TTL减1为1并转发探测包到第二个路由器,这时TTL减1为0,丢掉这个探测包并向源主机发回ICMP时间超过报文,源主机就获得了第二个路由器的IP地址;以此类推,直到探测报文到达traceroute的目的地,这时源主机就获得了到目的地的每一跳路由的IP地址。

2.7 IGMP(网际组管理协议)

IGMP协议目的是让网络系统知道当前主机所在的多播组,多播路由器根据这些信息以便于知道多播数据应该向哪些接口转发。

2.8 ARP(地址解析协议)

是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

2.9 RARP(反向地址解析协议)

将MAC地址转换为IP地址,该协议渐渐被BOOTP或DHCP所取代
RARP报文结构和ARP一样,RARP请求报文一般是广播,RARP回应报文为单播

一般发送RARP的流程如下:
1、发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2、本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
3、如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
4、如果不存在,RARP服务器对此不做任何的响应;
5、源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

2.10 ICMPv6(网际控制消息协议版本6)

综合icmpv4、igmp、arp的功能

2.11 BPF(BSD分组过滤器)

该接口提供对于数据链路层的访问能力,通常可以在源自Berkeley的内核中找到

2.12 DLPI(数据链路提供者接口)

该接口提供对于数据链路层的访问能力,通常随SVR4内核提供

3.三次握手与四次挥手

TCP状态转换图
在这里插入图片描述

4.time_wait状态

time_wait状态

5.端口号

端口号根据范围分为三种:

1 . Well-Known Ports(即公认端口号)

它是一些众人皆知著名的端口号,这些端口号固定分配给一些服务,我们上面提到的 HTTP 服务、 FTP服务等都属于这一类。知名端口号的范围是:0-1023。

2 . Registered Ports(即注册端口)

它是不可以动态调整的端口段,这些端口没有明确定义服务哪些特定的对象。不同的程序可以根据自己的需要自己定义,注册端口号的范围是:1024-49151。

3 . Dynamic, private or ephemeral ports(即动态、私有或临时端口号)

顾名思义,这些端口号是不可以注册的,这一段的端口被用作一些私人的或者定制化的服务,当然也可以用来做动态端口服务,这一段的范围是:49152–65535。

6.并发服务器

并发服务器中主服务器循环通过派生一个子进程来处理每个新的连接。

当服务器接收并接受这个客户的连接时,它fork一个自身的副本,让子进程来处理该客户的请求。TCP无法仅仅通过查看目的端口号来分离外来的分节到不同的端点,它必须查看套接字对的所有4个元素才能确定由哪个端点接收某个到达的分节。所有客户的连接都首先递送给拥有监听套接字的最初哪个服务器

7.TCP端口号与并发服务器,缓冲区大小限制,TCP/UDP输出机制

TCP端口号与并发服务器,缓冲区大小限制,TCP/UDP输出机制

相关文章:

  • 实验三.局域网的组建
  • 微服务14 Docker镜像仓库
  • Lambda详解 => {C#莱姆达表达式}
  • 6207. 统计定界子数组的数目(每日一难phase3-2)
  • java毕业设计家居体验平台的设计与实现Mybatis+系统+数据库+调试部署
  • SpringBoot测试配置属性与启动web环境
  • 11. SpringCloud Alibaba Seata
  • C++模板之——类模板详解及代码示例
  • Python推荐系统和深度学习教程
  • 基于Matlab使用雷达资源管理有效跟踪多个机动目标仿真(附源码)
  • 医院管理系统/医院药品管理系统
  • 项目中使用到的Spring注解及其作用
  • Postgresql源码(86)varchar的创建与插入分析
  • VMware创建虚拟机及安装Linux操作系统
  • 基于51单片机的指纹考勤机密码锁系统
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【EOS】Cleos基础
  • Android交互
  • angular组件开发
  • create-react-app做的留言板
  • ES学习笔记(12)--Symbol
  • IDEA常用插件整理
  • js作用域和this的理解
  • Linux Process Manage
  • Python中eval与exec的使用及区别
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vue组件定义
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 批量截取pdf文件
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 自定义函数
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 正则表达式-基础知识Review
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #NOIP 2014# day.2 T2 寻找道路
  • #QT(TCP网络编程-服务端)
  • #在 README.md 中生成项目目录结构
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (20050108)又读《平凡的世界》
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)认识微服务
  • (已解决)什么是vue导航守卫
  • (转)大道至简,职场上做人做事做管理
  • (转载)利用webkit抓取动态网页和链接
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .cfg\.dat\.mak(持续补充)
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Reactor简单使用教程