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

     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Ajax校验
    Struts2国际化
    OGNL
    Struts2基础数据校验和框架校验
    http
    AES,BigInteger,MD5加密
    随笔 js-----------------------------------------------------------------------------------------------------
    13年总结js,css,java xml
    window、linux安装jdk,excel 导入oracle,WebService,window 端口查看,svn服务安装,oracle用户解锁
    经典sql语句
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9252325.html
Copyright © 2011-2022 走看看