首页 > 系统相关 >Linux第13章

Linux第13章

时间:2023-11-20 21:55:18浏览次数:45  
标签:13 IP UDP TCP 主机 Linux 接字 数据包

第十三章学习笔记

TCP/IP和网络编程

TCP/IP协议

具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群

  • 互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。

IP主机和IP地址

主机是支持TCP/IP协议的计算机或设备。每个主机由一个32位的IP地址来标识。为了方便起见32位的IP地址号通常用点记法表示,例如:134.121.64.1,其中各个字节用点号分开。

主机也可以用主机名来表示。实际上,应用程序通常使用主机名而不是IP地址。在这个意义上说,主机名就等同于IP地址,因为给定其中一个,我们可以通过DNS(域名系统)(RFC1341987RFC10351987)服务器找到另一个,它将IP地址转换为主机名,反之亦然。
IP地址分为两部分,即NetworkID字段和HostID字段。发往IP地址的数据包首先被发送到具有相同networkID的路由器。路由器将通过HostID将数据包转发到网络中的特定主机。每个主机都有一个本地主机名。localhost默认IP地址为127001。本地主机的链路层是一个回送虚拟设备,它将每个数据包路由回同一个localhost。

  • 这个特性可以让我们在同一台计算机上运行TCP/IP应用程序而不需要实际连接到互联网。

IP协议

IP,在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为5类。另外,IP还有进入防护,知识产权,指针寄存器等含义。

IP数据包格式

版本号( 4bit ): 指P 协议版本。并且通信双方使用 的版本必须一致,目前我们使用的是IPv4,表示为 0100首部长度 (4) : IP 数据包的包头长度 (不包括数据)
优先级与服务类型(8):该字段用于表示数据包的 优先级和服务类型。通过在数据包中划分一定的优先 级,用于实现 QOS(服务质量)的要求。
总长度( 16): IP 数据包的总长度,最长为 65535 字 节,包括包头和数据标识符 ( 16): 该字段用于表示IP 数据包的标识符。
当P 对上层数据进行分片时,它将给所有的分片数据 分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误地重组标识符字段用于标志一个数据包,以便接收节点可以重组被分片的数据包标志(3) : 和标识符一起传递,指示不可以被分片 或者最后一个分片是否发出( 完整)段偏移量 ( 13 ): 在一个分片序列中如何将各分片连接起来,按什么顺序连接起来
TTL ( time to live )生命周期(8): 可以防止一个数包在网络中无限循环的转发下去,每经过一个路 由器-1,当 TTL 的值为 0时该数据包将被丢弃 0-255
协议号 (8): 封装的上层哪个协议,ICMP:1 TCP:6 UDP:17首部校验和( 16 ):这个字段只检验数据报的首部,不包括数据部分。这是因为数据报每经过一次路由 器,都要重新计算一下首部验和 (因为,一些字段 如生存时间、标志、片偏移等可能发生变化)。
源地址 (32 ) : 源ip 地址,表示发送端的IP 地址
目标地址 (32):目标ip 地址,表示接收端的1P 地址 可选项:选项字段根据实际情况可变长,可以和IP一起使用的选项有多人。例如,可以输入创建该数据包 的时间等。在可选项之后,就是上层数据.

UDP/TCP

  • UDP(用户数据报协议)在IP上运行,用于发送/接收数据报。与IP类似,UDP不能保证可靠性,但是快速高效。ping是一个向目标主机发送带时间戳UDP包的应用程序。接收到一个pinging数据包后,目标主机将带有时间戳的UDP包回送给发送者,让发送者可以计算和显示往返时间。如果目标主机不存在或宕机,当TTL减小为0时,路由器将会丢弃pinging UDP数据包。在这种情况下,用户会发现目标主机没有任何响应。用户可以尝试再次ping,或者断定目标主机宕机。
  • TCP(传输控制协议)是一种面向连接的协议,用于发送/接收数据流。TCP也可在IP 上运行,但它保证了可靠的数据传输。通常,UDP类似于发送邮件的USPS,而TCP类似于电话连接

端口编号

应用程序=(主机IP,协议,端口号)

套接字 API

  • int套接字(int域,int类型,int协议)
    新创建的套接字没有任何相联地址c它必须与主机地址和端口号绑定,以识别接收主机或发送主机:这通过bind系统调用来完成。
  • int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen)
    bind()系统调用将addr指定的地址分配给文件描述符sockfd所引用的套接字addrlen 指定addr所指向地址结构的大小(以字节为单位)。对于用于联系其他UDP服务器主机的UDP套接字,必须绑定到客户机地址,允许服务器发回应答。对于用于接收客户机连接的TCP套接字,必须先将其绑定到服务器主机地址。
  • UDP套接字使用scndto()/recvfrom()来发送/接收数据报。

TCP套接字

在创建套接字并将其绑定到服务器地址之后,TCP服务器使用listen()和acccpt()来接 收来自客户机的连接
int Iistcn(int sockfd, int backlog);
listen()将sockfd引用的套接字标记为将用于接收连入连接的套接字。backlog参数定义了等 待连接的最大队列长度。
int accept(int sockfd, struct sockaddr *addr, sockien_t *addrlen);
accept()系统调用与基于连接的套接字一起使用。它提取等待连接队列上的第一个连接请求 用于监听套接字sockfd,创建一个新的连接套接字,并返回一个引用该套接字的新文件描 述符,与客户机主机连接。在执行accept()系统调用时,TCP服务器阻塞,直到客户机通过 coimectO建立连接。

苏格拉底挑战

TCP\IP协议


TCP套接字


chatgpt

TCP/IP 协议族

TCP套接字

代码

server



client



标签:13,IP,UDP,TCP,主机,Linux,接字,数据包
From: https://www.cnblogs.com/nql2/p/17844988.html

相关文章

  • day131- springboot 的配置文件yaml的用法
    springboot的配置文件yaml的用法yaml文件同properties文件一样,适合用来做数据为中心的配置文件基本语法key:value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可'#'表示注释字......
  • linux简单常用命令
    1用户相关创建新用户、新账号(账户)useradd-m-g组新建用户名-m自动建立用户家目录-g指定用户所在的组,否则会建立一个和用户名同名的组最好加上-m,否则没有家目录,还需要一些其他操作,-g可以不加设置密码passwd用户名 Linux下对文件和文件夹切换所有者及所在组chg......
  • 常用的linux命令 docker常用命令
    mkdir新建目录rmdir删除目录rm只能删除文件,不能删除目录cptest.txtDocuments 进入容器的目录dockerexec-it<container_id_or_name>/bin/bash 挂载容器目录到本地目录dockerrun-it-v/host/path:/container/path<image_name>/bin/bash 从宿主机传输文件......
  • Linux操作系统的优势官方开发App应用程序有哪些优缺点?
    随着技术的不断进步,Linux操作系统在应用程序开发中扮演着越来越重要的角色。其开放性、稳定性和定制性成为开发者的首选。图片来源:http://news.gulufenfa.com/post/211Linux系统简介Linux作为一个广泛使用的开源操作系统,它的核心是Linux内核,由LinusTorvalds在1991年首次发布。Linu......
  • linux 中实现重复字符串的自动编号输出
     001、方法1(base)[root@pc1test]#lsa.txt(base)[root@pc1test]#cata.txt##测试文本aaaaaabbbbcccccccc##利用数组记录字符串重复的次数,借助printf格式化输出(base)[root@pc1test]#awk'{OFS="......
  • 深入了解Linux下的df命令
    在Linux系统中,df(磁盘空间使用情况查询)是一个常用的命令,用于显示文件系统的磁盘空间使用情况。通过df命令,你可以快速了解系统中各个文件系统的剩余空间、已用空间以及总空间。本文将深入探讨df命令的基本用法、常见选项以及解读输出结果的方法,以帮助你更好地理解和利用这个实用的命......
  • Linux训练营(gcc编译器)
    (文章目录)前言本篇文章我们来讲解gcc编译器,gcc编译器在Linux中是用来将从代码编译为可执行程序。为了更加深入了解程序编译生成的过程我们有必要来学习gcc的相关知识。一、gcc编译器介绍GCC(GNUCompilerCollection)是一款广泛使用的开源编译器套件,由GNU项目开发。它支持多种......
  • linux 安装keepalived
    1.下载安装包然后解压  1解压tar-zxvfkeepalived-2.2.2.tar.gzcd /opt/keepalived-2.2.2 ./configure--prefix=/usr/local/keepalived  有时候可能会报这个错误信息,此时只需要安装 libnl/libnl-3 依赖即可,输入 yum-yinstalllibnllibnl-deve***WARNIN......
  • Linux - 内存间通信
    进程间通信 Linux下进程通信的方式有管道:管道用于有亲缘关系的进程间通信有名管道:除了管道特性外还能在独立进程间进行通信信号:用于通知进程有某种事件发生消息队列:用于进程间较多数据的通信,有读写权限的进程可以向队列中添加消息。只有读权限则只能读取队列中消......
  • Linux设备树完全解析
    1.Linux中说的设备树是什么?对于搞Linux驱动开发和BSP的工程师来说,总是不可避免的接触到设备树,那么设备树指的是什么呢?其实通常所说的设备树是指Linux内核里面的设备树文件,以.dts结尾,也叫做设备树源文件,这个文件可以通过一个叫dtc的程序把他编译成.dtb文件,编译后的文件就是Linux......