首页 > 编程语言 >网络协议与编程

网络协议与编程

时间:2023-06-19 21:11:49浏览次数:60  
标签:报文 编程 网络协议 SYN TCP 传输 接字 数据

基本概念题:

套接字:套接字是网络传输传输用的软件设备。

协议:为了完成数据交换而定好的规则。

Linux的文件描述符:是为了区分指定文件而赋予文件的整数值。

面向连接的套接字传输特性有3点

传输过程中数据不会丢失,按序传输数据,传输的数据不存在数据边界(Boundary)

面向消息的套接字的特性

传输数据可能丢失,以快速传递为目的,与面向连接的套接字不同,不存在连接的概念

数据链路层:将上层传输过来的数据帧封装成帧(Frame),并通过物理介质进行传输。

数据链路层的主要作用包括:封装成帧,物理寻址,链路管理,流量控制等。

网络层:实现不同计算机之间数据通信,IP地址分配,路由选择,分组封装,数据报文分片,网络互连。

路由器:一种网络设备,主要用于在不同的网络之间进行互联和数据传输

分发数据,连接不同网络,选择最佳路径,分割广播域,转发数据等。

交换机:一种数据交换设备,主要用于在局域网中传输数据。

数据转发,端口管理,广播抑制,负载均衡等。

集线器:一种局域网设备,将多个计算机通过同一物理链路连接起来。

端口扩展,数据转发,广播等。

网关:网络传输设备,主要用于实现不同网络之间的通信。

地址转换,流量控制,安全保障,协议转换等。

“知名端口(Well-known PROT)”是指预定分配给特定操作的端口。

其范围是0~1023,其中最知名的端口是HTTP:80端口和TCP:21。

TCP的流:两台主机通过套接字建立连接后进入可交换数据的状态,也称为“流形成的状态”。UDP是基于报文面向无连接的,不存在流。

套接字地址分为IP地址和端口号。

IP地址是为了区分网络上的主机。

端口号是区分同一主机下的不同的SOCKET,以确保程序进程都能准确收发数据。

半关闭:主机在结束发送后还能接收来自另一端数据的能力。

多任务:用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务。

复用:为了提高物理设备的效率,用最少的物理要素传递最多数据时使用的技术。

复用:内核一旦发现进程指定的一个或者多个I/O条件就绪,它就通知进程。

I/O:是计算机交换信息的主要途径,流是i/o操作的主要方式。

问答题:

在服务器端创建套接字后,会依次调用listen函数和accept函数。请比较并说明两者作用。

listen():将套接字转为可接受连接方式(监听套接字)。

accept():受理连接请求,并且在没有连接请求的情况调用该函数,不会返回(阻塞)。直到有连接请求为止。

上面存在逻辑上的先后关系

bind()函数实现:分配地址

下列数据适合用哪些套接字传输?

演唱会讲究实时性 UDP

文本文件讲究可靠传输 TCP

支付这种敏感数据更需要可靠传输 TCP

何种类型的套接字不存在数据边界?这类套接字接收数据时需要注意什么?

面向连接的TCP套接字不存在数据边界,在接收套接字时,写入buffer的速度要小于读出buffer的速度。

实现迭代服务器/客户端

协议分层

请说明TCP/IP的4层协议栈,并说明TCP和UDP套接字经过的层级结构差异

链路层—>IP层—>TCP层—>应用层
链路层—>IP层—>UDP层—>应用层

请说出TCP/IP协议栈中链路层和IP层的作用,并给出两者关系。

数据链路层通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。为IP 层提供数据传送服务。网络层通过路由选择算法,为分组选择最适当的路径,实现两个端系统之间的数据透明传送。

怎么表示回送地址?其含义是什么?如果向回送地址传输数据将会发生什么情况?

回送地址表示计算机本身,为127.0.0.1。因此,如果将数据传送到IP地址127.0.0.1,数据不进行网络传输而是直接返回。

IPv4和IPv6的地址数目

IPV4是4字节地址族,IPV6是16字节地址族。

通过IPV4网络ID、主机ID及路由器的关系说明向公司局域网中的计算机传输数据的过程

使用IP地址中的网络ID向目标主机传输数据,数据传到路由器,路由器将参照IP地址的主机ID查找路由表,从对应的网口发送数据,数据经过路由器转发最终送到目标主机。

请说明IP地址分类方法,并说出下面这些IP地址的分类

http协议的基本含义

三次握手和四次挥手

初始状态:客户端处于 Closed 的状态,服务端处于 Listen 状态,进行三次握手。

第一次握手:客户端给服务端发一个 SYN 报文段,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_SENT 状态。(在SYN报文段中同步位SYN=1,初始序号seq=x)SYN=1的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:服务器收到客户端的 SYN 报文段之后,会以自己的 SYN 报文段作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN(c) + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN报文,此时服务器处于 SYN_RCVD 的状态。(在SYN ACK报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y)

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN(s) + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。(在ACK报文段中ACK=1,确认号ack=y+1,序号seq=x+1)ACK报文段可以携带数据,不携带数据则不消耗序号(第二次握手的既是ACK也是SYN报文段所以不可以)

四次挥手:

套接字A向套接字B传断开连接的消息

套接字B发出确认收到的消息

向套接字A传递可以断开连接的消息

套接字A同样发出确认消息

数据包内的FIN表示断开连接,双方各发送1次FIN消息后断开连接,此过程经历4个阶段。

UDP为什么比TCP速度快?为什么TCP数据传输可靠而UDP数据传输不可靠?

UDP是面向报文、无连接的传输层协议。UDP尽最大努力交付数据但不保证可靠传输。

TCP是面向字节流、有连接的传输层协议。TCP保证可靠传输。

TCP可靠和速度慢的原因:TCP有流量控制机制,保证了消息可靠传输,但因其复杂性从而限制了消息的传输(体现在速度上)

常见的域名有哪些是什么意思

cn、net、org、info、edu、gov

按语种分:英文域名、中文域名、日文域名和其他语种的域名

按地域分:行政区域名是按照中国的各个行政区划划分而成的

按机构分:顶级域名、二级域名;.com域名是使用最早也最广泛的域名

优雅地断开套接字连接

针对输出流执行半关闭的主机处于何种状态?半关闭会导致对方主机接收什么信息?

主机半关闭会使其发送最后一个报文段时附带一个EOF,告诉对方主机自己没有数据要发了,但还是可以接收对方主机传送的数据。

多进程

优点:

进程之间相互独立,不会互相干扰

各个进程之间可以利用 CPU 的多核优势,提高程序的运行效率

缺点:

创建、销毁进程需要较大的系统开销

进程之间的通信比线程更加复杂和消耗资源

多线程

优点:

相对于多进程,线程的创建和销毁比较轻量级

同一进程内的线程可以共享地址空间等数据结构,因此线程间通信比进程更为简单

缺点:

多个线程共享同一份数据时需要考虑数据安全问题,编写代码较为困难

线程之间存在竞争关系,可能导致死锁、饥饿等问题

标签:报文,编程,网络协议,SYN,TCP,传输,接字,数据
From: https://www.cnblogs.com/dslyyy/p/17492196.html

相关文章

  • python3 面向对象编程--类的封装和继承
    #python3importrefromurllibimportrequestimportosclassPosterSpider(object):def__init__(self,path='./'):self.path=path#theentryofthisprocessdefgetStart(self,url):page=self.reqPage(url)......
  • 曲线艺术编程 coding curves 第十二章 玑镂(扭索)纹
    第十二章玑镂(扭索)纹原作:KeithPetershttps://www.bit-101.com/blog/2022/11/coding-curves/译者:池中物王二狗(sheldon)源码:github:https://github.com/willian12345/coding-curves曲线艺术编程系列第12章玑镂纹是一种错综复杂且非常迷人的图案。它经常被绘制在银行钞......
  • 去往js函数式编程(7)
    管道和组合  管道和组合是一种技术,用于设置函数以便它们按顺序工作,使一个函数的输出称为下一个函数的输入。在linux中,执行一个命令并将其输出作为第二个命令的输入,而第二个命令的输出又成为第三个命令的输入,依此类推,这被称为管道。constmarkers=[{name:'AR',lat:-......
  • Linux网络编程
    查看端口占用情况netstat-tunlp-t(tcp)仅显示tcp相关选项-u(udp)仅显示udp相关选项-n拒绝显示列名,能显示数字的全部转化为数字-l仅显示出在listen(监听)的服务状态-p显示潜力相关链接的程序名linux查看端口被哪个进程占用的方法本机地址127.0.0.1:这个地......
  • 关于Linux系统下Lua编程运行环境的部署安装
    这里以操作系统:RedHatEnterpriseLinuxrelease8.7(Ootpa)为例,讲解如下部署Lua编程脚本的运行环境首先对于Lua脚本,需要保证系统中有lua二进制程序文件,即/usr/bin/lua但最小化安装的Linux- RedHatEnterpriseLinuxrelease8.7(Ootpa) 笔者试了一下,没有lua命令了 ......
  • python 并发编程-3
    Python中的并发编程-3爬虫是典型的I/O密集型任务,I/O密集型任务的特点就是程序会经常性的因为I/O操作而进入阻塞状态,比如我们之前使用requests获取页面代码或二进制内容,发出一个请求之后,程序必须要等待网站返回响应之后才能继续运行,如果目标网站不是很给力或者网络状况不是很......
  • NOI / 1.9编程基础之顺序 09:直方图
    描述给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。假设Fmax(Fmax<10000)是数组里最大的数,那么我们只统计{0,1,2.....Fmax}里每个数出现的次数。输入第一行n是数组的大小。1<=n<=10000。紧接着一行是数组的n个元素。输出按顺序输......
  • Python编程和数据科学中的数据处理:如何从数据中提取有用的信息和数据
    目录引言数据分析和数据处理是数据科学和人工智能领域的核心话题之一。数据科学家和工程师需要从大量的数据中提取有用的信息和知识,以便更好地理解和预测现实世界中的事件。本文将介绍Python编程和数据科学中的数据处理技术,帮助读者从数据中提取有用的信息和数据。技术原理......
  • Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解标题:《Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能》1.引言人工智能(AI)是一个广泛的领域,涵盖了许多不同的技术和应用。在Python编程和数据科学中,人工智能是一个非常重要......
  • Python编程和数据科学中的大数据分析:如何从大量数据中提取有意义的信息和模式
    目录《Python编程和数据科学中的大数据分析:如何从大量数据中提取有意义的信息和模式》引言大数据时代已经来临,随着互联网和物联网的普及,海量数据的产生和存储已经成为一种普遍的现象。这些数据包含各种各样的信息,如文本、图像、音频和视频等,而大数据分析则是将这些海量数据中提......