티스토리 뷰

728x90

 

컴퓨터를 비롯한 장비들이 네트워크에서 신뢰성이 높게 데이터를 주고받으려면 통신 규약인 프로토콜을 따라야 한다.

네트워크의 작동에 관한 모델 중 TCP/ IP 모델은 전송 제어 프로토콜(TCP)과 인터넷 프로토콜(IP)를 따른다.

IP : 데이터가 네트워크상에서 목적지를 찾아갈 수 있도록 경로를 찾기 위한 것 

TCP : IP에 따라 경로가 정해지면 장비 간의 실제적인 데이터 전송이 이루어지는 것

(두 장비 간 양방향 데이터 전송을 신뢰성 있게 보장하기 위한 것)

 

TCP에 따라 전송되는 작은 정보 묶음을 세그먼트라 한다.

세그먼트헤더 부분데이터 부분으로 구분된다.

헤더에는 연결을 요청하는 신호 SYN, 수신했음을 알리는 신호 ACK, 순서 번호(Seq)와 접수 번호 (Ack) 등이 담긴다.

 

 A 와 B  장비 간에 양방향 데이터 전송이 필요하다고 하자.

데이터가 포함된 세그먼트들을 전송하려면 먼저 연결 설정을 해야 한다. 

이는 데이터 부분을 비워 둔 특정한 세그먼트들을 A와 B가 순차적으로 전송하는 '세 방향 악수 방식'으로 이루어진다.

이를 위해 A는 먼저 SYN이 포함된 세그먼트를 B에 보낸다.

B는 이를 수신했음을 알리고 자신도 연결 요청을 하기 위해 ACK와 SYN이 함께 포함된 세그먼트를 A에 보낸다.

A는 B에게 다시 ACK가 포함된 세그먼트를 전송하여 을이 수신하면 연결 설정이 완료된다.

이렇게 연결 설정이 완료되는 마지막 세그먼트에는 데이터를 실어 보내는 것도 허용된다.

 

예를 들어 A가 그 세그먼트에 5바이트의 데이터를 싣고 헤더에 'Seq=11, Ack=51, ACK'를 담았다고 하자. 

순서 번호는 자신이 보낼 전체 데이터에서 1바이트마다 순서대로 연속적으로 붙이는 번호이되, 헤더에는 해당 세그먼트에 담겨 있는 데이터에서의 순서 번호 중 가장 앞쪽 숫자가 적힌다.

즉 이 세그먼트에는 순서 번호가 11에서 15까지인 데이터가 포함돼 있다.

B는 이를 수신한 후 10바이트의 데이터를 싣고 헤더에 'Seq=51, Ack=16, ACK'를 담은 세그먼트를 A에 전송할 수 있다.

본래 A가 보냈던 세그먼트에서 접수 번호는 자신이 상대로부터 다음 번에 받아야 할 세그먼트에서의 순서 번호로 정해지는 숫자여서 그 접수 번호와 B가 새롭게 전송한 세그먼트에서의 순서 번호가 같은 것이다.

이어서 A는 헤드에 'Seq=16, Ack=61, ACK'를 담은 세그먼트를 B에 보낼 수 있다.

 

각 장비는 상대가 보낸 세그먼트에서의 순서 번호에 따라 수신 데이터의 순서를 바르게 정렬한다.

순서 번호가 중복인 세그먼트튼 버려진다. 그런데 일부 세그먼트가 도착하지 않은 분실 상태가 나타날 수 있따.

분실이 발생할 때 TCP는 수신 장비가 분실 여부를 상대에게 알리는 방법을 사용하지 않고 타임 아웃 기능에 의해 오류가 복구되도록 한다.

 

예를 들어 한 장비에서 데이터가 포함된 세그먼트를 여럿 연속적으로 보냈는데,  A가 연속으로 보낸 것들 중 마지막 것이 도착하지 않았다고 하자.

B는 자신이 가장 최근에 수신한 세그먼트를 토대로 접수 번호와 ACK를 포함한 세그먼트를 갑에 전송할 것이다.

A는 그 세그먼트를 받음에 따라 분실 가능성이 있음을 확인한 후 타임아웃 기능에 따라 일정 시간 동안 기다린다.

그러고 분실된 그 세그먼트를 재전송한다.

일정 시간 동안 기다리는 것은 분실된 줄 알았던 세그먼트가 그 사이에 B에 전송되고 그 수신을 알리는 세그먼트가 A에 도착할 수도 있기 때문이다.

 

[요약]

TCP/IP는 각각 네트워크 작동에 관한 모델 중 하나이다.

IP는 데이터가 네트워크상에서 목적지를 찾아갈 수 있도록 경로를 찾는 것인데, 이를 찾아 경로를 정하면 TCP를 통해 장비간 실제적인 데이터 전송이 이루어진다.

728x90
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함