套接字
- 套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
- 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
- 套接字是应用程序通过网络协议进行通信的接口,是应用程序与网络协议进行交互的接口
- Socket套接字:套接字用于描述IP地址和端口,是一个通信链的句柄。
- 应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
套接字的表示方法
- 套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。
- 每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。例如:如果IP地址是192.168.0.1,而端口号是23,那么得到套接字就是(192.168.0.1:23)
套接字工作原理
1. 要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为 ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。
2. http访问Internet底层,也是使用的socket通信。在浏览器的地址栏输入一个网址,其实是向服务器发送消息(请求)。
根据连接启动的方式以及本地套接字要连接的目标.
套接字的工作流程
- 套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
- 服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的 状态,实时监控网络状态。
- 客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接 字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的 地址和端口号,然后就向服务器端套接字提出连接请求。
- 连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它 就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦 客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接收其他客户端套接字的连接请求
客户端套接字的连接请求原理
- IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。
- UDP协议不可靠连接,不能保证连接畅通,同时不能保证信息正确传达。
- TCP协议是Internet最基本的协议,可靠连接、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
- 通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
TCP三次握手简介
TCP协议三次握手:假设A,B两终端进行通信,A发信息给B,检查连接畅通(第一次),B回给A表达连接畅通,正确读取A的信息,并回复给A(第二次),A再给B发消息,表明A能正确读取B发的信息,并回复给B(第三次),第四次传真正要传输的数据。这是一个简单的示例。
报文
- 报文(message)是网络中交换与传出的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长短不限且可变。
- 报文也是网络传输的单位,传输过程中会不断的封装成组,包,帧来传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。比如:里面有报文类型,报文版本,报文长度,报文实体等信息。
HTTP报文详解:
- HTTP报文是HTTP应用程序之间发送的数据块。这些数据块以文本形式的信息开头,这些信息描述了报文的内容以及含义,后面的跟着可选的数据部分。
- HTTP报文都是在客户端,服务器和代理之间流动。
- HTTP报文的流向:一次HTTP请求。HTTP报文会从“客户端”留到“代理”在留到“服务器”,在服务器工作完成之后,报文会从“服务器”在服务器工作完成之后,报文后悔偶从“服务器”留到“代理”,在留到“客户端”
HTTP请求报文
- HTTP 请求报文由四部分组成,分别是请求行、请求头、空行和请求体,其中空行也是组成部分之一,作用是进行分隔,必不可少。
- 请求行:由请求方法、URI组成,它们之间用空格分隔,最后以回车和换行符结尾进行内容分割
- 请求头:请求头部由键/值对组成,每行一对,键和值用冒号“:”(英文)分隔。请求头部告知服务器所有有关于客户端请求的信息
- 空行:用户进行内容分割,表示请求头到此为止,下一行的内容不再是请求头。
- 请求体包含的就是请求数据,当使用的是GET方法的时候,没有请求体。
HTTP 响应报文
- 客户端向服务端发送请求之后,服务器接收并处理客户端发过来的请求后正常情况下会返回一个HTTP的响应消息,这个就是响应报文。
- HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。形式上除了状态行之外,其他三个部分与请求报文类似。
- 状态行格式为:HTTP-Version Status-Code Reason-Phrase CRLF。HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
- 响应头,响应头也由键值对组成,每行一对,键和值用英文冒号 : 分隔。响应头域允许服务器传递不能放在状态行的附加信息,主要描述服务器的信息和返回的数据信息
- 空行作为内容分割,表示以下不再是响应头的内容。
- 响应体是服务器返回给浏览器的响应信息