zoukankan      html  css  js  c++  java
  • 什么是TCP,什么是UDP,它们两者的区别? 三次握手

    TCP:

             定义:

                 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

             TCP编程的服务器端一般步骤是:

    1. 创建一个socket,用函数socket();SOCKET SocketListen = socket(AF_INET,SOCK_STREAM,

    IPPROTO_TCP)

    1. 设置socket属性,用函数setsocket();*可选
    2. 绑定IP地址、端口等想你想到socket上,用函数bind();SOCKET_ERROR=

    bind(SocketListen,(const sockaddr*)&addr,sizef(addr))

    1. 开启监听,用函数listen(); SOCKET_ERROR==listen(SocketListen,2)
    2. 接收客户端上来的连接,用函数accept();SOCKET SocketWaiter = accept(SocketListen,_Out_ struct sockaddr*addr _Inout_ int*addrlen);
    3. 收发数据,用函数send()和recv(),或者read()和write();
    4. 关闭网络连接;closesocket(SocktListen);closesocket(SocketWaiter);
    5. 关闭监听;

    SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的。

    TCP编程的客户端一般步骤是: 
      1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
      4、设置要连接的对方的IP地址和端口等属性; 
      5、连接服务器,用函数connect(); 
      6、收发数据,用函数send()和recv(),或者read()和write(); 
      7、关闭网络连接;

    UDP:

             定义:

                      UDP (User Datagram Protocol 用户数据报协议)是OSI(Open System Interconnection开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

             与之对应的UDP编程步骤要简单许多,分别如下:

    1. 创建一个socket,用函数socket();
    2. 设置socket属性,用函数setsockopt();*可选
    3. 绑定IP地址、端口的等信息到socket上,用函数bind();
    4. 循环接受数据,用函数recvfrom();
    5. 关闭网络连接

    UDP编程的客户端一般步骤是:

    1. 创建一个socket,用函数socket();
    2. 设置socket属性,用函数setsockopt();*可选
    3. 绑定IP地址、端口等信息到socket上,用函数bind();*可选
    4. 设置对方的IP地址和端口等属性;
    5. 发送数据,用函数sendto();
    6. 关闭网络连接;

    区别:

    1. TCP面向连接(如打电话要先拨号码建立连接);

    TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差距,不丢失,不重复,且按序到达;

    TCP通过校验和重传控制,序号标识,滑动窗口,确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉 的分包进行顺序控制。

    每一条TCP连接只能是点到点的;

    TCP对系统资源要求较多

    1. UDP是无连接的,及发送数据之前不需要建立连接

    UDP尽最大努力交付,即不保证可靠交付

    UDP具有较好的实时性,工作效率比TCP高,使用与对高速传输和实时性有较高的通信或广播通信

    UDP支持一对一,一对多,多对一和多对多的交互通信

    UDP对系统资源要求较少

    -----------------------------------------------------------------------------------------------------------------------------------------

    OSI参考模型中的网络层,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
    第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    三次握手客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
    完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
    SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
    半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间 [1] 

  • 相关阅读:
    spring mvc给参数起别名
    聊聊分布式定时任务中间件架构及其实现--转
    Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
    终端安全工具 gartner 排名
    When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结很有用 看未来演进方向
    DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网
    DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp
    DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat
    Data Mining and Machine Learning in Cybersecurity PDF
    ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
  • 原文地址:https://www.cnblogs.com/bruce1992/p/13986963.html
Copyright © 2011-2022 走看看