基本概念题:
套接字:套接字是网络传输传输用的软件设备。
协议:为了完成数据交换而定好的规则。
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