Day 02
Socket编程
1、什么是socket
socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。。(网络编程)
我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网的工具。
2、为何要学习socket编程:
基于socket开发一个C/S或者B/S结构的软件
Client---------网络------------Server
Browser--------网络------------Server
c/s 客户端(手机应用、电脑应用、需要服务器提供服务的应用) 服务器
b/s 浏览器 (浏览器) 服务器
服务器(提供服务) web服务器(专门返回网页) 腾讯云服务器(部署写好的服务程序 物理设备)
学习 socket,也就是学习计算机之间如何通信,并编写出实用的程序。
3、如何基于socket编程
网络是什么=网络就是一种辅助双方或者多方能够连接在一起的工具
网络存在的意义=就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方
4、OSI七层协议
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wc6y7wfr-1597145793919)(C:%5CUsers%5CS%5CDesktop%5C0_1325744597WM32.gif)]
1.OSI七层
- 应用层:http、ftp、自定义协议
- 传输层:tcp或者udp
- 网络层:IP协议
- 数据链层:Ethernet 以太网
- 物理层
mac地址 + IP地址 + port号
2.tcp协议详解
三次握手
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化***为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的***和确认号,交换
TCP窗口大小信息。
客户端:男生 服务端:女生
-
第一次握手:客户端发送网络包,服务端收到了。 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。(男生发送请求建立(交往)联系的信息)
-
第二次握手:服务端发包,客户端收到了。 这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。(女生收到信息,回信)
-
第三次握手:客户端发包,服务端收到了。 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。(男生收到回信,两者正常交往)
四次挥手
建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务器均可主动发起挥手动作。
- 第一次挥手:客户端发送连接释放请求,并停止在发送数据,主动关闭TCP连接,进入终止等待状态1,等待服务端的确认。(男生请求终止交往,向女生发送请求等待女生回应。)
- 第二次挥手:服务端收到请求后,发出确认关闭的文报,此时TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认文报后,进入种终止等待状态2,等待服务端发出的连接释放的报文段(女生确认分手,并回复确认分手,并准备发送断开连接文段,此时二者关系貌合神离,男生等待断开联系文段)
- 第三次挥手:服务端发出连接释放报文段,服务端进入最后确认状态,等待客户端的确认。(女生发送断开联系文段,等待男生确认。)
- 第四次挥手:客户端收到连接释放报文段后,对此发出确认报文段客户端进入时间等待状态,客户端收到报文后,就关闭连接了,处于Close状态。(男生收到断开联系文段,并回复已收到,女生收到后关闭连接)
关于ARP (地址解析协议)
地址解析协议是用于根据给定网络层地址,通常是IPv4地址,查找其对应的数据链层地址,比如MAC地址的协议。
地址解析协议的主要内容
本地局域网中
- 主机A要向主机D发送数据时,需要先在其 ARP 高速缓存中查看有无 网络设备X 的 IP 地址。如果有,则直接在 ARP 高速缓存 查出其对应的 物理地址。不然,主机A的ARP进程在本地局域网发送ARP请求广播((广播就是向局域网中所有的主机发送请求,所有的主机都能接收到请求))
- 我是IP(A) 我的硬件地址MAC(A).我想知道主机IP(D)(IP已知)的MAC(D)(硬件地址),此时局域网中所有主机上运行的ARP进程都收到此ARP请求
- 但是只有主机D的IP地址是符合主机A的请求的,所以只有主机D在收到ARP请求后向主机A发送ARP响应
- 主机 A 收到主机 B 的 ARP 响应后, 会在其 ARP 高速缓存中记录 主机B 的 IP 地址到其硬件地址的映射。