美文网首页
TCP/UDP协议, 以及Socket通信

TCP/UDP协议, 以及Socket通信

作者: 努努Nunu | 来源:发表于2017-04-08 22:07 被阅读212次

    写于: 2016年05月04日

    TCP协议基本介绍

    TCP协议是自IP协议出来后有一常用的信息传输协议. 是一个基于连接的、安全的、双向的传输协议.

    现在, TCP协议一般都和IP协议共同使用, 我们称之为TCP/IP.

    TCP说白了就是互联网扩张的时候, 数据从一段经过无数个路由器和交换机到达指定的另一端的解决方案, 该方案包括最小路径、最快时间、下一站路由器的选择等.

    在计算机中的TCP协议

    我们的计算机或者手机, 在连入网络之后, 就可以和别的设备做信息交互.

    TCP协议要做到的 就是保证你的信息能够准确、安全、快速地发送到你要发送的另一台设备上.

    识别一台设备的唯一方式就是用IP地址.

    每一台计算机或者手机, 连入网络之后都会有一个独立的IP地址, 这个IP地址用于标识这台设备, 并且IP地址不会与别的设备共用.

    TCP的传输原理

    定义两台计算机 S、C.

    计算机S: Service, 服务器

    计算机C: Client, 客户端

    TCP协议规定, 两台设备传输协议签必须要进行连接 (基于连接的传输协议), 同时服务器不能主动向客户端提出连接, 只有客户端才能主动向服务器发送连接请求.

    TCP协议规定, 实现TCP协议的客户端必须要有一个端口号. 端口号是一个1~65535的整数. 该整数用于区分应用程序 (比如比的电脑上的QQ支持TCP协议, 浏览器支持TCP协议, 端口的定义就是为了保证QQ服务器发过来的数据能够被QQ进程所接受, 而不是给你的浏览器进程. 理论上, 只需要两个端口号不一样即可).

    C 主动向 S 发出连接请求, 连接成功后, S会发送给C一个连接成功的标识数据, C收到这个数据表示连接成功, 之后两台设备就可以进行信息交互.

    这两台设备连接成功之后, 均可以主动向另一端发送消息.

    这里定义你的电脑IP是111.111.111.111 QQ进程的端口号就是8888.

    QQ服务器的IP是222.222.222.222 QQ服务器的端口号是9999.

    你的 QQ 1234 要给一个QQ 4321发送一条消息叫"您好".
    QQ进程会进行数据打包, 加入是JASON数据:

    {
           sourceId : "1234"
           targetId : "4321"
           content : "您好"
    }
    

    然后 QQ进程便会提交TCP请求, 也就是"吧这个JSON数据发送到222.222.222.222的9999端口号上" .

    操作系统便会吧JSON数据和IP数据以及端口号打包成一个特定的格式(TCP报文). 然后转为二进制数据, 最后变为正弦的模拟信号, 从你的计算机网卡发出, 到路由器, 再到因特网.

    QQ服务器收到数据后, 会隐藏式地发送一个接收确认帧 (这个确认帧是TCP规定的, 不是腾讯微了安全起见而特意写的), 你的计算机收到这个确认帧, 代表本次消息发送成功. 如果你的计算机长时间没有收到确认帧, 代表本次信息传输失败(所以你可以知道这个消息是否安全的发送到你想要的位置) .

    UDP协议基本介绍

    UDP协议和TCP协议是在同一层次上的, 但是UDP协议是基于广播的协议.

    广播和连接的区别

    TCP就好比打电话,A有事情告诉B,但是B并不知道A有事情要告诉 他,所以B不会打电话给A。而A要主动打电话给B,只有打电话成功, 并且B拿起电话后,AB才能语言交流,并且AB可以立马知道对方是否 听清自己说了什么

    UDP就好比广播,在一个广场上,有一大堆人,你想要把一个消息通 过一个喇叭告诉一个叫“小新”的人。但是你不知道“小新”到底在广场的 什么位置,甚至他到底有没有在这个广场上你都不确定。你拿起一个 麦克风,说“小新,你妈喊你回家吃饭”。你从外面的广播听到了这条 消息,所以你觉得你的消息发送成功了。现在结果有三种:第一种, 广场上压根就没有叫“小新”的人,所以没人在乎你说什么;第二种, 你想找的那个“纪小新”真的在广场上,他听到你的消息后乖乖回家吃 饭了;第三种,广场上不但有“纪小新”,还有“张小新”,结果两个人都 各自回家吃饭了。后两种情况可能会出问题,比如“纪小新”听到消息 后,并不知道谁告诉他的,也不知道这个消息的真实性,所以他会很 纠结。

    从上面可以总结UDP是一个基于非连接的、不安全的、单项的传输协议.

    在计算机中的UDP协议

    内容和TCP差不多, 但去呗在于UDP的"发送成功"是指消息成功从你的电脑上发出, 而不是接受者真的接收到了你的消息

    UDP传输原理

    UDP传输不需要连接, 发送端只需要把自己的消息打包好(UDP报文), 然后从电脑上发到因特网即可, 不会有任何的确认帧来反馈给你.

    为什么存在UDP协议

    UDP协议如此不安全, 为什么会存在??

    其实很简单, TCP的安全是有资源代价的, 一个TCP报文要安全传输, 必须要有资源对其进行监视才可以. 就像你双十一买的东西, 你每天都要刷一刷物流信息一样.

    UDP不安全, 但占用的资源较少, 所以一般不需要有安全传输要求的信息可以使用UDP传输.

    Socket

    Socket是一个类, 每个编程语言都有自己的Socket. Socket就是单纯的协议实现.

    TCP和UDP只是一个协议、一个规定. 而Socket就是一个遵守这个协议, 遵守这个规定的执行者.

    每一个终端都可以通过Socket实现TCP和UDP的信息交互.

    比如
    iOS端实现TCP协议的类叫做NSSocket.
    Android端实现TCP协议的类叫做JSocket.

    虽然这是连个不同语言的不同类, 但是他们都遵循TCP协议. 所以他们可以在不同类型的操作系统上实现信息交互, 从而实现iOS和Android的信息交互.

    HTTP协议基本介绍

    HTTP本质上是一种协议, 全称是Hypertext Transfer Protocol, 即超文本传输协议.
    HTTP协议是基于TCP协议拓展出来的协议, 与HTTP协议一样的还有SMTP协议、POP3协议、FTP协议等.

    实现原理

    现在客户端要发送 http://wwww.baidu.com/httptext?school=taili&name=nunu&class=ios

    客户端要做的事情

    1.到全球域名解析获取www.baidu.com的真实IP地址 (加入得到123.123.123.123)
    2.创建一个Socket连接123.123.123.123的8080端口
    3.连接成功继续, 连接失败停止.
    4.发送一个TCP报文, 内容是"HTTP/1.0/httptext...{school.taili.name=nunu,class:ios}"
    5.等待服务器回传 (此时服务器快速把数据发给你).
    6.断开连接.

    ==HTTP、Socket、TCP的区别, 烦请关注另一篇 ==

    相关文章

      网友评论

          本文标题:TCP/UDP协议, 以及Socket通信

          本文链接:https://www.haomeiwen.com/subject/cuerattx.html