zoukankan      html  css  js  c++  java
  • 网络编程小节

    1.什么是C/S架构?

    Client/Server架构,即客户端/服务器架构。是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。

    2.互联网协议是什么?分别介绍五层协议中每一层的功能?

    互联网协议是TCP/IP协议.

    因特网协议栈共有五层:应用层、传输层、网络层、链路层和物理层。不同于OSI七层模型这也是实际使用中使用的分层方式。 [1] 
    (1)应用层
    支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信。主要的协议有:http、ftp、telnet、smtp、pop3等。
    (2)传输层
    负责为信源和信宿提供应用程序进程间的数据传输服务,这一层上主要定义了两个传输协议,传输控制协议即TCP和用户数据报协议UDP。
    (3)网络层
    负责将数据报独立地从信源发送到信宿,主要解决路由选择、拥塞控制和网络互联等问题。
    (4)数据链路层
    负责将IP数据报封装成合适在物理网络上传输的帧格式并传输,或将从物理网络接收到的帧解封,取出IP数据报交给网络层。
    (5)物理层
    负责将比特流在结点间传输,即负责物理传输。该层的协议既与链路有关也与传输介质有关。
     
    3.基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手?
     
    因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
     
    4.为何基于tcp协议的通信比基于udp协议的通信更可靠?
     
    TCP最可靠的方式就是只要不得到确认,就重新发送数据报,直到得到对方的确认为止。
    • [1] 确认和重传机制

      • 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
      • 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传
    • [2] 数据排序

      • TCP有专门的序列号SN字段,可提供数据re-order
    • [3] 流量控制

      • 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量
    • [4] 拥塞控制

      TCP的拥塞控制由4个核心算法组成。

      • “慢启动”(Slow Start)

      • “拥塞避免”(Congestion avoidance)

      • “快速重传 ”(Fast Retransmit)

      • “快速恢复”(Fast Recovery)

    以上就是TCP比UDP传输更可靠的原因。

    5.流式协议指的是什么协议,数据报协议指的是什么协议?
     
    流式协议指的是TCP协议,数据包协议指的是UDP协议.
     
    6.什么是socket?简述基于tcp协议的套接字通信流程.
     
    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。
    通信流程:
    服务端:            客户端:
    1.生成socket对象.       1.生成socket对象 
    2.绑定ip和端口         2.发起到服务器的连接
    3.监听ip和端口         3.服务器接收后,开始发送数据
    4.接受客户端连接请求
    5.接收数据
     
    7.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
     
    socket 为提高传输效率,发送方往往要收集到足够多的数据后才发送一次数据给对方。若连续几次需要send的数据都很少,通常TCP socket 会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。

    两种情况下会发生粘包:

    1.发送端需要等本机的缓冲区满了以后才发送出去,造成粘包(发送数据时间间隔很端,数据很小,会合在一个起,产生粘包)

    2.接收端不及时接收缓冲区的包,造成多个包接受(客户端发送一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据 ,就产生粘包)

     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9252325.html
Copyright © 2011-2022 走看看