一些概念

TCP,三次握手,传递包

TCP与UDP

TCP(Transmission Control

Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。

UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

三次握手

1主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B ,向主机B请求建立连接,通过这个数据段,

主机A告诉主机B两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.

2主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:

我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我

3主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:"我已收到回复,我现在要开始传输实际数据了

这样3次握手就完成了,主机A和主机B就可以传输数据了.

3次握手的特点

没有应用层的数据

SYN这个标志位只有在TCP建产连接时才会被置1

握手完成后SYN标志位被置0

四次挥手

(1)TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。客户端进入FIN-WAIT-1状态

(2)服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。服务器进入CLOSE-WAIT状态,客户端收到信号之后进入FIN-WAIT2状态

(3)服务器关闭客户端的连接,发送一个FIN给客户端。服务器进入LAST-ACK状态,客户端收到信号之后进入TIME-WAIT状态

(4)客户端发回ACK报文确认,并将确认序号设置为收到序号加1。服务器收到信号后CLOSED

传递包的过程:

pc1向pc2发送数据,该数据为5000字节,该数据到达传输层,使用tcp传输会给每个字节加一个序列号,序列号是从0~2的32次方之间随机产生的。比如该报文的第一个字节的序列号为x,第二个字节的序列号就是x+1,最后一个字节的编号就是x+4999。传输层在传送数据时如果数据比较大会进行分段传送,假设,100个字节分一个片段,那么第一个片段的第一个字节序列号肯定是X,最后一个字节的序列号就是x+99,那么就用X来表示该报文片段。第二个报文片段的序列号范围是X+100-----X+199,用X+100代表第二个报文片段。以此类推,第三个X+200---X+299。。。。。

当接收方收到第一个报文片段后,如果接受方正确的收到了第一个报文段就会发送一个确认,确认的目的就是表示准确的收到了一个报文,并通知发送方希望继续接受的报文段的序号是什么。如果接收方收到了第一个报文,该报文的序号是X到X+99,如果接受方还想继续接受第二个报文就需要向发送方发送确认号X+100,表示我准确的收到了X--X+99这段数据,我希望你从X+100这个序号继续发送。

参考链接:http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html

什么是http,http基本的方法有哪些,基本状态

http协议

http是超文本传输协议,用于从www服务器传输超文本到本地浏览器的传送协议,http协议通常承载在TCP协议之上,它是一个短连接,无状态的协议。(wiki:: The Hypertext Transfer Protocol (HTTP) is an application

protocol for distributed, collaborative, and hypermedia information systems.[1]

HTTP is the foundation of data communication for the World Wide Web.)

基本方法

GET请求获取Request-URI所标识的资源

POST在Request-URI所标识的资源后附加新的数据

HEAD请求获取由Request-URI所标识的资源的响应消息报头

PUT请求服务器存储一个资源,并用Request-URI作为其标识

DELETE请求服务器删除Request-URI所标识的资源

TRACE请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT保留将来使用

OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求

状态码

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK//客户端请求成功

400 Bad Request//客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden//服务器收到请求,但是拒绝提供服务

404 Not Found//请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable//服务器当前不能处理客户端的请求,一段时间后可能恢复正常

什么是restful

中文链接:http://www.ruanyifeng.com/blog/2011/09/restful.html

定义

Representational state transfer (REST) orRESTful web services is a way of providing interoperability between computersystems on the Internet. REST-compliant Web services allow requesting systemsto access and manipulate textual representations of Web resources using auniform and predefined set of stateless operations.

方法

We use http protocol and several operation

to manipulate resources. GET for从服务器中取出资源;POST在服务器新建一个资源;PUT在服务器更新资源(客户端提供改变后的完整资源);PATCH在服务器更新资源(客户端提供改变的属性);DELETE从服务器删除资源;Head获取资源的元数据;OPTIONS获取信息,关于资源的哪些属性是客户端可以改变的

状态

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

204 NO CONTENT - [DELETE]:用户删除数据成功。

400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

403 Forbidden - [*]表示用户得到授权(与401错误相对),但是访问是被禁止的。

404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

422 Unprocesable entity - [POST/PUT/PATCH]当创建一个对象时,发生一个验证错误。

500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

主要的软件设计模式

抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

工厂方法模式(Factory Method):定义一个接口,让子类决定将哪一个类实例化,工厂方法将类的实例化延迟到其子类。

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问

单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

门面模式(Facade):为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

java接口、抽象类

不同:接口的抽象级别较高,只能做方法的声明,接口内定义的变量只能是公共静态常量;抽象类可以做方法声明也可以做方法实现,可以定义普通变量。抽象类中可以没有抽象方法。接口方法,访问权限必须是公共的public;一个类可以有一个或多个子类,而每个类都有至少一个共有方法作为外部代码访问其的接口。

相同:都不能直接实例化,接口需要被实现,抽象类需要被子类继承;接口中的方法需要被实现类全部实现,抽象类中的抽象方法需要被子类全部实现

override(覆盖)和overload(重载)区别

overload means in one class, there can besome methods that have the same name but have different parameter lists.

Override means重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

你可能感兴趣的:(一些概念)