计算机网络复习总结6

1.52 请介绍socket通信的具体步骤。

sockets(套接字)编程有三种:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。

  1. 服务器端编程的步骤

    (1)加载套接字库,创建套接字(WSAStartup()/socket());

    (2)绑定套接字到一个IP地址和一个端口上(bind());

    (3)将套接字设置为监听模式等待连接请求(listen());

    (4)请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

    (5)用返回的套接字和客户端进行通信(send()/recv());

    (6)返回,等待另一连接请求;

    (7)关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

  2. 客户端编程的步骤:

    (1)加载套接字库,创建套接字(WSAStartup()/socket());

    (2)向服务器发出连接请求(connect());

    (3)和服务器端进行通信(send()/recv());

    (4)关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

//代码实例(服务器) 
#include <stdio.h> 
#include <Winsock2.h> 
void main() {  
WORD wVersionRequested;  
WSADATA wsaData;  
int err;     
wVersionRequested = MAKEWORD( 1, 1 );     
err = WSAStartup( wVersionRequested, &wsaData );  
if ( err != 0 ) {   return;  }     
if ( LOBYTE( wsaData.wVersion ) != 1 ||  HIBYTE( wsaData.wVersion ) != 1 ) {   WSACleanup( );   
return;  }  
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);    
SOCKADDR_IN addrSrv;  
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  
addrSrv.sin_family=AF_INET;  
addrSrv.sin_port=htons(6000);     
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));    
listen(sockSrv,5);    
SOCKADDR_IN addrClient;  
int len=sizeof(SOCKADDR);  
while(1)  {   
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);   
char sendBuf[50];   
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));   send(sockConn,sendBuf,strlen(sendBuf)+1,0);   
char recvBuf[50];   
recv(sockConn,recvBuf,50,0);   
printf("%s\n",recvBuf);   
closesocket(sockConn);  }   }
//代码实例(客户端) 
#include <stdio.h> 
#include <Winsock2.h> 
void main() {  
WORD wVersionRequested;  
WSADATA wsaData;  
int err;    
wVersionRequested = MAKEWORD( 1, 1 );    
err = WSAStartup( wVersionRequested, &wsaData );  
if ( err != 0 ) {   return;  }    
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) {   
WSACleanup( );   
return;  
}  
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);    
SOCKADDR_IN addrSrv;  
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  
addrSrv.sin_family=AF_INET;  
addrSrv.sin_port=htons(6000);  
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
send(sockClient,"hello",strlen("hello")+1,0);  
char recvBuf[50];  
recv(sockClient,recvBuf,50,0);  
printf("%s\n",recvBuf);    
closesocket(sockClient);  
WSACleanup();
}
1.53 服务端怎么提高处理socket连接的性能?

提高处理socket连接的性能,请遵循以下技巧:

  1. 最小化报文传输的延时。
  2. 最小化系统调用的负载。
  3. 为 Bandwidth Delay Product 调节 TCP 窗口。
  4. 动态优化 GNU/Linux TCP/IP 栈。

  1. 最小化报文传输的延时。

    在通过 TCP socket 进行通信时,数据都拆分成了数据块,这样它们就可以封装到给定连接的 TCP payload(指 TCP 数据包中的有效负荷)中了。TCP payload 的大小取决于几个因素(例如最大报文长度和路径),但是这些因素在连接发起时都是已知的。为了达到最好的性能,我们的目标是使用尽可能多的可用数据来填充每个报文。当没有足够的数据来填充 payload 时(也称为最大报文段长度(maximum segment size)或 MSS),TCP 就会采用 Nagle 算法自动将一些小的缓冲区连接到一个报文段中。这样可以通过最小化所发送的报文的数量来提高应用程序的效率,并减轻整体的网络拥塞问题。

  2. 最小化系统调用的负载。

    任何时候通过一个 socket 来读写数据时,都是在使用一个系统调用(system call)。这个调用(例如 read 或 write)跨越了用户空间应用程序与内核的边界。另外,在进入内核之前,该调用会通过 C 库来进入内核中的一个通用函数(system_call())。从 system_call()中,这个调用会进入文件系统层,内核会在这儿确定正在处理的是哪种类型的设备。最后,调用会进入 socket 层,数据就是在这里进行读取或进行排队从而通过 socket 进行传输的(这涉及数据的副本)。

    这个过程说明系统调用不仅仅是在应用程序和内核中进行操作的,而且还要经过应用程序和内核中的很多层次。这个过程耗费的资源很高,因此调用次数越多,通过这个调用链进行的工作所需要的时间就越长,应用程序的性能也就越低。由于我们无法避免这些系统调用,因此唯一的选择是最小化使用这些调用的次数

  3. 为 Bandwidth Delay Product 调节 TCP 窗口。

    TCP 的性能取决于几个方面的因素。两个最重要的因素是链接带宽(link bandwidth)(报文在网络上传输的速率)和 往返时间(round-trip time) 或 RTT(发送报文与接收到另一端的响应之间的延时)。这两个值确定了称为 Bandwidth Delay Product(BDP)的内容。

    给定链接带宽和 RTT 之后,就可以计算出 BDP 的值了,不过这代表什么意义呢?BDP 给出了一种简单的方法来计算理论上最优的 TCP socket 缓冲区大小(其中保存了排队等待传输和等待应用程序接收的数据)。如果缓冲区太小,那么 TCP 窗口就不能完全打开,这会对性能造成限制。如果缓冲区太大,那么宝贵的内存资源就会造成浪费。如果设置的缓冲区大小正好合适,那么就可以完全利用可用的带宽。

  4. 动态优化 GNU/Linux TCP/IP 栈。

    标准的 GNU/Linux 发行版试图对各种部署情况都进行优化。这意味着标准的发行版可能并没有对现有的环境进行特殊的优化。GNU/Linux 提供了很多可调节的内核参数,可以使用这些参数为自己的操作系统进行动态配置。

1.54 介绍一下流量控制和拥塞控制。
  1. 流量控制和拥塞控制定义

    流量控制

    如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。流量控制就是让发送方慢点,要让接收方来得及接收。

    拥塞控制

    拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

  2. 流量控制和拥塞控制区别

    流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。

    拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。

  3. TCP流量控制解决方法

    TCP的流量控制是利用滑动窗口机制实现的,接收方在返回的数据中会包含自己的接收窗口的大小,以控制发送方的数据发送。

  4. TCP拥塞控制解决方法

    TCP拥塞控制的四种算法:慢开始、拥塞避免、快重传、快恢复。

    (1)慢开始算法:当主机开始发送数据时,并不清楚网络的负载情况,所以由小到大逐渐增大拥塞窗口,每经过一个传输轮次没有出现超时就将拥塞窗口加倍。同时还需要设置一个慢开始门限,在拥塞窗口小于慢开始门限时使用慢开始算法,大于慢开始门限时,使用拥塞避免算法;

    (2)拥塞避免算法:在拥塞窗口大于慢开始门限时,让拥塞窗口按线性规律缓慢增长。即每经过一个传输轮次,拥塞窗口增大一个MSS最大报文段尺寸。(拥塞避免并非完全能够避免拥塞,只是使网络比较不容易出现拥塞)

    (3)快重传算法:使发送方今早知道发生了个别报文段丢失,并不是出现网络拥塞。

    要求接受不要登塞自己发送数据时才进行捎带确认,而是立即发送确认,即使收到了失序的报文段也要立即发出对已收到报文段的重复确认。而发送方一旦受到三个连续的重读确认,就将相应的报文段立即重传。

    (4)快恢复算法:发送方知道只有个别报文段丢失而不是网络拥塞时,不启动慢开始算法,而是执行快恢复算法,将慢开始门限和拥塞窗口值调整为当前窗口的一半,开始执行拥塞避免算法

1.55 对路由协议是否有所了解?
  1. 路由协议定义

    路由协议(英语:Routing protocol)是一种指定数据包转送方式的网上协议。Internet网络的主要节点设备是路由器,路由器通过路由表来转发接收到的数据。转发策略可以是人工指定的(通过静态路由、策略路由等方法)。在具有较小规模的网络中,人工指定转发策略没有任何问题。但是在具有较大规模的网络中(如跨国企业网络、ISP网络),如果通过人工指定转发策略,将会给网络管理员带来巨大的工作量,并且在管理、维护路由表上也变得十分困难。为了解决这个问题,动态路由协议应运而生。动态路由协议可以让路由器自动学习到其他路由器的网络,并且网络拓扑发生改变后自动更新路由表。网络管理员只需要配置动态路由协议即可,相比人工指定转发策略,工作量大大减少。

  2. 原理

    路由协议通过在路由器之间共享路由信息来支持可路由协议。路由信息在相邻路由器之间传递,确保所有路由器知道到其它路由器的路径。总之,路由协议创建了路由表,描述了网络拓扑结构;路由协议与路由器,执行路由选择和数据包转发功能。

  3. 路由器的作用以及常见的路由协议

    路由协议主要运行于路由器上,路由协议是用来确定到达路径的,起到一个地图导航,负责找路的作用。它工作在网络层。它包括RIP,IGRP(Cisco私有协议),EIGRP(Cisco私有协议),OSPF,IS-IS,BGP。以下为这六个协议的详细说明:

    (1)RIP(路由信息协议)

    RIP很早就被用在Internet上,是最简单的路由协议。它是“路由信息协议(Route Information Protocol)”的简写,主要传递路由信息,通过每隔30秒广播一次路由表,维护相邻路由器的位置关系,同时根据收到的路由表信息计算自己的路由表信息。RIP是一个距离矢量路由协议,最大跳数为15跳,超过15跳的网络则认为目标网络不可达。此协议通常用在网络架构较为简单的小型网络环境。分为RIPv1和RIPv2两个版本,后者支持VLSM技术以及一系列技术上的改进。RIP的收敛速度较慢。

    (2)IGRP(内部网关路由协议)

    IGRP协议是“内部网关路由协议(Interior Gateway Routing Protocol)”的缩写,由Cisco于二十世纪八十年代独立开发,属于Cisco私有协议。IGRP和RIP一样,同属距离矢量路由协议,因此在诸多方面有着相似点,如IGRP也是周期性的广播路由表,也存在最大跳数(默认为100跳,达到或超过100跳则认为目标网络不可达)。IGRP最大的特点是使用了混合度量值,同时考虑了链路的带宽、延迟、负载、MTU、可靠性5个方面来计算路由的度量值,而不像其他IGP协议单纯的考虑某一个方面来计算度量值。IGRP已经被Cisco独立开发的EIGRP协议所取代,版本号为12.3及其以上的Cisco IOS(Internetwork Operating System)已经不支持该协议,已经罕有运行IGRP协议的网络。

    (3)EIGRP(增强型内部网关路由协议)

    由于IGRP协议的种种缺陷以及不足,Cisco开发了EIGRP协议(增强型内部网关路由协议)来取代IGRP协议。EIGRP属于高级距离矢量路由协议(又称混合型路由协议),继承了IGRP的混合度量值,最大特点在于引入了非等价负载均衡技术,并拥有极快的收敛速度。EIGRP协议在Cisco设备网络环境中广泛部署。

    (4)OSPF(开放式最短路径优先)

    OSPF协议是“开放式最短路径优先(Open Shortest Path First)”的缩写,属于链路状态路由协议。OSPF提出了“区域(area)”的概念,每个区域中所有路由器维护着一个相同的链路状态数据库(LSDB)。区域又分为骨干区域(骨干区域的编号必须为0)和非骨干区域(非0编号区域),如果一个运行OSPF的网络只存在单一区域,则该区域可以是骨干区域或者非骨干区域。如果该网络存在多个区域,那么必须存在骨干区域,并且所有非骨干区域必须和骨干区域直接相连。OSPF利用所维护的链路状态数据库,通过最短路径优先算法(SPF算法)计算得到路由表。OSPF的收敛速度较快。由于其特有的开放性以及良好的扩展性,OSPF协议在各种网络中广泛部署。

    (5)IS-IS(中间系统到中间系统)

    IS-IS协议是Intermediate system to intermediate system(中间系统到中间系统)的缩写,属于链路状态路由协议。标准IS-IS协议是由国际标准化组织制定的ISO/IEC 10589:2002所定义的,标准IS-IS不适合用于IP网络,因此IETF制定了适用于IP网络的集成化IS-IS协议(Integrated IS-IS)。和OSPF相同,IS-IS也使用了“区域”的概念,同样也维护着一份链路状态数据库,通过最短生成树算法(SPF)计算出最佳路径。IS-IS的收敛速度较快。集成化IS-IS协议是ISP骨干网上最常用的IGP协议。

    (6)BGP(边界网关协议)

    为了维护各个ISP的独立利益,标准化组织制定了ISP间的路由协议BGP。BGP是“边界网关协议(Border Gateway Protocol)”的缩写,处理各ISP之间的路由传递。但是BGP运行在相对核心的地位,需要用户对网络的结构有相当的了解,否则可能会造成较大损失。

1.56 直播可能需要使用到什么样的协议?

视频直播有多种协议,使用rtmp协议的就是rtmp直播。直播流就是视频流,即传递的视频数据。常见的协议有RTMP、RTSP、HTTP协议,这三个协议都属于互联网TCP/IP五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用RTMP、RTSP,而点播用HTTP

  1. RTMP协议

    (1)是流媒体协议;

    (2)RTMP协议是Adobe的私有协议,未完全公开;

    (3)RTMP协议一般传输的是flv,f4v格式流;

    (4)RTMP一般在TCP1个通道上传输命令和数据。

  2. RTSP协议

    (1)是流媒体协议;

    (2)RTSP协议是共有协议,并有专门机构做维护;

    (3)RTSP协议一般传输的是ts、mp4格式的流;

    (4)RTSP传输一般需要2-3个通道,命令和数据通道分离。

  3. HTTP协议

    (1)不是是流媒体协议;

    (2)HTTP协议是共有协议,并有专门机构做维护;

    (3)HTTP协议没有特定的传输流;

    (4)HTTP传输一般需要2-3个通道,命令和数据通道分离。

一个完整的视频直播过程,包括采集、处理、编码、封装、推流、传输、转码、分发、解码、播放等

1.57 谈谈单工、双工、半双工的通信方式。
  1. 单工:数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信。举例:电视,广播。
  2. 半双工:半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。
  3. 双工:全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信。举例:电话通信。

扩展资料:
单工、半双工和全双工是电信计算机网络中的三种通信信道。这些通信信道可以提供信息传达的途径。通信信道可以是物理传输介质或通过多路复用介质的逻辑连接。物理传输介质是指能够传播能量波的材料物质,例如数据通信中的导线。并且逻辑连接通常指电路交换连接或分组模式虚拟电路连接,例如无线电信通道。由于通信信道的帮助,信息可以无障碍地传输。

单工模式一般用在只向一个方向传输数据的场合。例如计算机与打印机之间的通信是单工模式,因为只有计算机向打印机传输数据,而没有相反方向的数据传输。还有在某些通信信道中,如单工无线发送等。

————内容源于网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王嘻嘻-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值