进阶之路网络编程中的ocket与腾讯云开发者社区

.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:30px;margin-bottom:5px}.markdown-body h2{padding-bottom:12px;font-size:24px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:18px;padding-bottom:0}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:15px}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body ul li{margin-bottom:0;list-style:inherit}.markdown-body ol li .task-list-item,.markdown-body ul li .task-list-item{list-style:none}.markdown-body ol li .task-list-item ol,.markdown-body ol li .task-list-item ul,.markdown-body ul li .task-list-item ol,.markdown-body ul li .task-list-item ul{margin-top:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:3px}.markdown-body ol li{padding-left:6px}.markdown-body .contains-task-list{padding-left:0}.markdown-body .task-list-item{list-style:none}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}

大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助

socket是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

要理解socket,就需要理解TCP/IP协议,两者之间的关系,就如同驿站和和驰道一般。

OSI模型:

目前实际使用的网络模型是 TCP/IP 模型,它对 OSI 模型进行了简化。它把所有的TCP/IP系列协议归类到四个抽象层中

应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

传输层:TCP,UDP

网络层:IP,ICMP,OSPF,EIGRP,IGMP

数据链路层:SLIP,CSLIP,PPP,MTU

每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的

我们平常使用网络传输信息,是将程序产生的数据一层层地往下传输,最后传输到互联网中。数据每向下一层,就会通过这一层的协议进行包装,等程序发送到网上,已经像俄罗斯套娃一般多了四层包装。

而其他的用户接收数据包的时候,也会从网络结构层一层一层的向上传输,同时也一层一层地拆开包装,最后回到应用层,就得到了程序锁需要的数据。

给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这一层,我已经处理过了。给数据拆包装的过程正好相反,就是去掉数据头部的标志,让它逐渐现出原形。

两台计算机进行通信时,必须遵守以下原则:

我们所说的Socket在应用层与传输层之间,传输层将底层的服务提供给socket抽象层,socket抽象层再提供给应用层,通过这个办法来进行数据传递。

使用 connect() 建立连接时,客户端和服务器端会相互发送三个数据包

客户端调用socket() 函数创建套接字后,因为没有建立连接,所以套接字处于CLOSED状态;服务器端调用 listen()函数后,套接字进入LISTEN状态,开始监听客户端请求。

这个时候,客户端开始发起请求:

说明

三次握手的关键是要确认对方收到了自己的数据包,这个目标就是通过“确认号(Ack)”字段实现的。计算机会记录下自己发送的数据包序号 Seq,待收到对方的数据包后,检测“确认号(Ack)”字段,看Ack = Seq + 1是否成立,如果成立说明对方正确收到了自己的数据包。

建立连接后,客户端和服务器都处于ESTABLISED状态。这时,客户端发起断开连接的请求:

注意:服务器收到请求后并不是立即断开连接,而是先向客户端发送“确认包”,告诉它我知道了,我需要准备一下才能断开连接。

客户端最后一次发送 ACK包后进入 TIME_WAIT 状态,而不是直接进入 CLOSED 状态关闭连接,这是为什么呢?

TCP 是面向连接的传输方式,必须保证数据能够正确到达目标机器,不能丢失或出错,而网络是不稳定的,随时可能会毁坏数据,所以机器A每次向机器B发送数据包后,都要求机器B”确认“,回传ACK包,告诉机器A我收到了,这样机器A才能知道数据传送成功了。如果机器B没有回传ACK包,机器A会重新发送,直到机器B回传ACK包。

客户端最后一次向服务器回传ACK包时,有可能会因为网络问题导致服务器收不到,服务器会再次发送 FIN 包,如果这时客户端完全关闭了连接,那么服务器无论如何也收不到ACK包了,所以客户端需要等待片刻、确认对方收到ACK包后才能进入CLOSED状态。

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。

安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS协议的主要作用可以分为两种:

第一步:建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接

第三步:客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕

第四步:服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK

第五步:服务器向客户端发送应答头信息

第六步:服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端

第七步:服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接

第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

第三步:客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。

第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

第五步:Web服务器利用自己的私钥解密出会话密钥。

第六步:Web服务器利用会话密钥加密与客户端之间的通信。

讲了HTTP和HTTPS,顺便再和大家一起回忆一下TCP与UDP。

TCP 是面向连接的传输协议,建立连接时要经过三次握手,断开连接时要经过四次握手,中间传输数据时也要回复 ACK 包确认,多种机制保证了数据能够正确到达,不会丢失或出错。

UDP 是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单地把数据丢到网络中,也不需要 ACK 包确认。

如果只考虑可靠性,TCP 的确比 UDP 好。

但 UDP 在结构上比 TCP 更加简洁,不会发送 ACK 的应答消息,也不会给数据包分配 Seq 序号,所以 UDP 的传输效率有时会比 TCP 高出很多,编程中实现 UDP 也比 TCP 简单。

UDP 的可靠性虽然比不上TCP,但也不会像想象中那么频繁地发生数据损毁,在更加重视传输效率而非可靠性的情况下,UDP 是一种很好的选择。比如视频通信或音频通信,就非常适合采用 UDP 协议。通信时数据必须高效传输才不会产生“卡顿”现象,用户体验才更加流畅,如果丢失几个数据包,视频画面可能会出现“雪花”,音频可能会夹带一些杂音,这些都是无妨的。

与 UDP 相比,TCP 的生命在于流控制,这保证了数据传输的正确性。

TCP 的速度无法超越 UDP,但在收发某些类型的数据时有可能接近 UDP。例如,每次交换的数据量越大,TCP 的传输速率就越接近于 UDP。

THE END
0.TCP/IP详解基于TCP/IP的参考模型将协议分成5个层次,分别是物理层、链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。 从传输层开始以下都在内核中。 IOS 各层的协议: TCP/IP 各层协议 TCP/IP协议被称为传输控制协议/互联网协议,又称网络通讯协议(Transmission ControlProtocol)。是由网络层的jvzquC41dnuh0lxfp0tfv8|gkzooa==2287828ftvkimg8igvcomu8632;875;=
1.计算机网络(四)TCP/IP四层模型详解tcpip四层模型TCP/IP 模型是实际应用标准吗? 是的,互联网几乎所有通信都基于 TCP/IP 协议族。 总结 TCP/IP 四层模型:网络接口层、网络层、传输层、应用层。 各层之间功能分明,协议丰富。 是现代互联网通信的基础。 六、协议原理、具体数据结构 1.IP 协议(网络层) jvzquC41dnuh0lxfp0tfv8tpn{stew4ctvodnn4fgvgjn|4374;:79>6
2.详解TCP/IP网络模型tcp模型网络模型有好几种,其中最常讨论的有俩种:OSI七层参考模型、TCP/IP四层参考模型。OSI模型是国际标准模型,结构分的很细,然而既复杂又不实用,我们这篇文章来讲已经得到广泛应用的TCP/IP模型,同时也是面试也问的比较多的。 很多人可能会有个疑问,TCP/IP模型到底是分了四层还是五层,有些资料说四层,有些资料说五层jvzquC41dnuh0lxfp0tfv8|w{wnbpp5:255bt}neng5eg}fknu524?827467
3.互联网基石:TCP/IP四层模型,由浅入深直击原理!tcpip参考模型本文深入解析TCP/IP四层模型,涵盖网络接口层、网络层、传输层及应用层,讲解各层功能与常见协议。 什么是TCP/IP? 从TCP/IP看包含两个部分: TCP IP TCP/IP 实际包括几十个 Internet协议,但只有少数是核心协议,其中有两个通常被认为是最重要的,就是我们上面提到的 TCP 和 IP。 IP 属于OSI网络层(第三层),在互联 jvzquC41dnuh0lxfp0tfv8r2a8637B6381gsvrhng1jfvjnnu1738B>62:7
4.OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系一、OSI七层模型 OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。 二、TCP/IP四层模型 TCP/IP是一个四层的体系结构,主要包括:应用层、运输层、网际层和网络接口层。从实质上讲,只有上边三层jvzquC41pki/e€sw0gjv0ls1kplp1:5651819>3jvo
5.2024年上半年网络工程师综合知识真题与答案(文字版)A.查看IP组播路由表信息 B.查看二层组播转发表信息. C.查看组播组的成员端口信息 D.查看组播转发表信息 信管网参考答案:D 查看解析:www.cnitpm.com/st/6323028247.html 44、数据链路层的帧结构中,帧检验序列的作用是() A.保证数据的完整性和准确性 B.标识数据段的起始和结束 C.提供数据的可靠传输 D.实现jvzquC41o0iok}uo0eun1yr313<199>l:qlut>n20nuou
6.计算机网络层次和TCP/IP协议族常用协议名称以及端口计算机网络四层模型与OSI七层模型对应关系详解,包含TCP/UDP端口号、DNS解析、HTTPS加密等核心协议。了解应用层、传输层、网络层及数据链路层的协议功能,掌握CSMA/CD、令牌环等关键技术。四层模型简化OSI结构,便于理解网络通信原理。jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk03@52679
7.网络安全与防范论文汇总十篇目前网络信息安全面临的威胁主要来自于以下几个方面: 3.1 tcp/ip协议存在安全漏洞 目前英特网上广泛使用的网络协议是tcp/ip协议,而tcp/ip协议恰恰存在安全漏洞。如ip层协议就有许多安全缺陷。ip地址可以软件设置,这就造成了地址假冒和地址欺骗两类安全隐患;ip协议支持源路由方式,即源点可以指定信息包传送到目的节点的jvzquC41yy}/z~jujw4dqv3ep1nbq€jp15?8::3jvor
8.网络安全主动防护汇总十篇协议漏洞主要是计算机网络通信系统的通信协议进行划分的,计算机网络主要以TCP/IP协议为基础进行通信,由于TCP/IP缺陷形成的漏洞,导致计算机网络安全性能存在缺陷,被划分为协议漏洞。协议漏洞在网络安全中没有严格的区分标准,但是病毒利用协议漏洞对网络进行攻击产生的影响具有一定的相似性,就需要从TCP/IP协议层对整个计算机进jvzquC41yy}/z~jujw4dqv3ep1nbq€jp16:5;:3jvor
9.下列给出的协议中,属于TCP/IP协议结构的应用层是()下列给出的协议中,属于TCP/IP协议结构的应用层是() A.UDP B.IP C.TCP D.Telnet 你可能感兴趣的试题 单项选择题 ()是TCP/IP模型传输层中的无连接协议。 A.TCP协议 B.UDP协议 C.IP协议 D.ICMP协议 单项选择题 网络协议的三个要素:语法、语义和() jvzquC41yy}/rypcq0ipo8ykmw5tjryk1;jc899633hg4=