티스토리 뷰

Study/Network

[Networking] TCP service model (1)

생각많은 소심남 2016. 8. 30. 00:11

transport layer 중 Transmisson Control Protocol(TCP)는 networking을 요구하는 대부분의 application에서 필요로 하는 reliable, end-to-end, bi direction byte stream 기능을 제공하는 프로토콜로 가장 많이 쓰인다. 이에 대한 동작을 하나하나씩 살펴보고자 한다.

 1) 우선 Application이 전하고자 하는 byte stream은 일종의 data 형태로 transport layer에 내려와 특정 정보를 가진 header와 함께 TCP segment로 결합된다.

2) TCP segment는 Network Layer, 특히 IP layer로 내려와 일종의 Datagram을 형성한다. 지금 보면 계속 header가 붙고 아래층으로 내려와 결합하는 형태로 보여지는 것을 알 수 있는데, 이런 개념을 보통 encapsulation이라고 표현한다. 여기에 IP와 관련한 정보를 담은 Header(일반적으로는 IP Address)가 덧붙어 IP Datagram을 형성한다. 

3) 앞에서 만들어진 IP Datagram은 하위의 Link Layer에서 다뤄지는 Link Frame의 일부로 encapsulate된다. 역시 이렇게 생성된 Data에 Link Address를 담은 header를 붙고, 결국 이 정보가 최종적인 형태로 Line을 통해 상대방에게 전달된다.

 여기까지가 Frame이 형성되기까지의 과정이고 실제로 이 데이터가 Peer에게 전달되어야 둘 사이의 통신이 이뤄지게 되는것이다. 

 위와 같이 각 Host간의 Application들이 TCP를 사용한다고 했을때, TCP가 둘간에 two-way 통신 채널을 생성한다. 우선은 Source가 Destination쪽으로 채널이 형성되며(A→B), 그 다음 Destination에서 Source쪽으로 채널이 형성된다.(A←B) 이렇게 두가지 방향으로 channel이 형성되는 과정 자체를 connection이라고 한다.

이렇게 connection이 형성된 이후부터는 TCP는 일종의 state machine으로 동작해 connection을 제어하게 된다.


큰 맥락에서는 이렇게 connection이 형성되는데, 이런 과정은 3-way handshake 라는 방식을 통해 이뤄진다. 우선 위와 같이 Host A와 B가 있다고 가정해보자.

여기서 A와 B가 하나의 line으로 표현되어 있는데, 이는 A와 B 사이의 상호관계를 flow chart 형식으로 표현하기 위해서이다.

1) 우선 Host A는 B에게 Syn 메세지를 전달한다. Syn은 Synchronize의 약자인데, 이 메세지를 B한테 보냄으로써 B에게 보낼 byte stream에 대한 base number를 전달한다. 만약 0이 Syn 메세지를 통해서 전달되었다면, B에게 보낼 데이터는 0부터 시작하게 된다. 이를 Host B가 정상적으로 수신한 경우 기존에 보낸 Syn 메세지에 Ack 메세지를 덧붙여서 보내게 된다. Ack는 Acknowledge(인지하다)의 약자인데 이를 통해서 B가 A의 request를 인지하고 A에서 B로의 connection 형성되는 것에 대해 동의하게 된다. 

2) 마지막으로 A는 Syn+Ack에 대한 반응으로 다시 Host B에게 Ack 신호를 보낸다. 물론 이때의 Ack는 B가 connection 형성에 동의한 것에 동의한다는 것으로 이해하면 좋을 거 같다. 이 과정을 통해 반대 방향에 대한 connection도 형성됬다.

위와 같이 SYN, SYN+ACK, ACK 의 방식으로 connection이 형성되는 과정을 3-way handshake 방식이라고 한다. 예전에 네트워크 수업들을때 교수님이 2명 나오라고 해서 하나의 메세지를 보낼때마다 계속 악수를 시켜서 사람들이 웃곤했었는데, 마침 그게 생각이 났다.

'Study > Network' 카테고리의 다른 글

[Network] ICMP Service Model  (0) 2018.01.24
[oFono] Overview  (0) 2017.11.17
[Networking] UDP service model  (0) 2016.09.06
[Networking] TCP service model (3)  (0) 2016.08.30
[Networking] TCP service model (2)  (0) 2016.08.30
[Network] Nash Equilibrium 문제  (0) 2015.03.02
[Network] End-to-end Principle  (2) 2014.02.06
댓글