NLP Learner in Switzerland

[쉬운 정리] 모두의 네트워크 6장 ::: 전송 계층 : 신뢰할 수 있는 데이터 전송하기 본문

Computer Networks/모두의 네트워크

[쉬운 정리] 모두의 네트워크 6장 ::: 전송 계층 : 신뢰할 수 있는 데이터 전송하기

초코빵 2021. 4. 16. 10:00
728x90
반응형

 

3장에서는 OSI모델의 물리 계층을 봤고,

4장에서는 그 상위 계층인 데이터 링크 계층,

5장에서는 그 상위 계층인 네트워크 계층,

6장에서는 그 상위 계층인 전송 계층을 본다.

 

 

 

서로 다른 네트워크 간의 통신은 라우터가 필요하다고 했었다. (5장 참고)

하지만 라우터의 라우팅 기능으로도 데이터가 목적지에 도착하지 못할 수도 있다.

라우팅 정보가 잘못될 수도 있고, 전송 중에 라우터 문제나 패킷손상이 발생할 수 있기 때문이다.

 

이 때 필요한 것이

전송 계층

신뢰할 수 있는 데이터를 전달하기 위해 2가지 역할을 수행한다.

1. 오류를 점검하고, 오류 발생시 데이터 재전송을 요청하는 역할

2. 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 역할(e.g. 이메일? or 웹브라우저?)

 

하지만 모든 상황에서 이 역할들을 항상 수행하려면 비효율적일 때도 있겠지?

그래서 애플리케이션에 따라 두가지 통신 방식으로 나뉜다.

연결형 통신 비연결형 통신
신뢰성/정확성 있는 데이터 신속성/효율성 있는 데이터
따라서 오류 발생시 데이터 재전송 요청 빠르게 보내는 것만이 대목적! 데이터 재전송 요청 없음
상대방과 상호적으로 체크 상대방과의 체크 없음. 일방적 전송.
e.g. 인터넷 웹사이트 e.g. 동영상, 스트리밍(버벅이지 않는게 더 중요!)
일대일(Unicast) 일대일, 일대다(Broadcast), 다대다(Multicast)
TCP 전송 제어 프로토콜(연결이 성공해야 통신) UDP 사용자 데이터그램 프로토콜(연결없이 통신 가능)

TCP로 전송을 하면

캡슐화(2장 참고)할 때 TCP헤더가 붙는다.

TCP헤더 + 데이터 = 세그먼트(segment)라고 부른다.

TCP헤더

연결(Connection)

이라는 가상의 독점 통신로를 확립해야 데이터를 전송할 수 있다.

위의 TCP헤더 노란색 칠한 부분(코드비트)과 연관된다.

디폴트값은 0이고, 비트 활성화시 1이 된다.

 

SYN(씬)은 연결 요청용, ACK(애크)는 확인 응답용이다.

 

1. 컴퓨터1이 SYN을 보내 연결을 요청(1)하면

2. 컴퓨터2가 ACK 연결확인 응답(1)을 보내면서 컴퓨터1에 SYN연결(1)을 요청한다

3. 컴퓨터1 또한 ACK 연결확인 응답(1)을 보낸다.

→ 이러한 연결확립 과정을 TCP 3-way handshake라고 부른다.

데이터 전송이 완료된 후 연결을 끊고 싶다면

FIN(핀) 연결 종료, ACK(애크) 확인 응답을 사용한다.

 

1. 컴퓨터1이 FIN 연결 종료를 요청(1)하면

2. 컴퓨터2가 ACK 확인 응답(1)을 보낸다.

3. 그리고나서 컴퓨터2가 컴퓨터1에 FIN 연결 종료(1)를 요청한다

3. 컴퓨터1 또한 ACK 확인 응답(1)을 보낸다.

 

그래서 전체적인 통신 과정은 다음과 같다.

그럼 이제 연결은 되었다고 생각하고 데이터 전송에 대해 알아보자.

 

세그먼트를 보내기 위해 3-way handshake 과정을 거치면

TCP헤더내의 일련번호, 확인응답번호가 결정되고, 서로의 윈도우 크기(더 아래에 나옴)를 알게 된다.

일련번호(Sequence number)는 받는 쪽에 이 데이터가 몇 번째 데이터인지를 알려준다

확인응답번호(Acknowledgement number)는 보내는 쪽에 몇 번째 데이터를 받았는지 알려준다.

- 컴퓨터2가 200바이트 데이터를 수신하면 다음 수신하고자 하는 데이터 번호를 확인응답번호에 넣는다.

- 3201인 이유는 3001 + 200바이트 = 3201을 달라고 해야한다

- 그 다음은 3401을 달라고 해야한다.

- 확인응답을 위한 번호는 계속 4001으로 고정이다.

이 때, 데이터 손상/유실이 발견되면 일정시간 대기 후 재전송을 시도한다.

이것을 재전송 제어라고 부른다.

 

비효율적이야

그런데 세그먼트를 보낼 때마다 이걸 다 하려니까 비효율의 끝판왕임.

그래서 세그먼트를 일단 연속으로 주르륵 보내고, 받은 쪽에서 저장을 해둔 후, 확인응답을 반환한다.

하지만 과도하게 받으면 오버플로우(overflow)가 발생하므로 받는 쪽의 저장공간(버퍼) 한계치를 미리 알 필요가 있다.

이 버퍼의 한계치가 윈도우 크기(window size)이다.

이렇게 하면 정확한 데이터 전달을 할 수 있다.

 

포트번호

이제 목적지를 알아야 하는데, 이는 TCP헤더에 있는 출발지 포트번호목적지 포트번호를 통해 알 수 있다.

포트번호는 0~65535번을 사용할 수 있고 용도에 따라 다음과 같이 나뉘어진다.

포트번호 용도 예시
0~1023 주요 프로토콜(서버측 애플리케이션)이 사용함
Well-known ports
20, 21 FTP(파일전송 / 23 텔넷(Telnet)
25 SMTP(이메일 전송) / 53 DNS(도메인 이름해석)
80 HTTP(웹) / 110 POP3(이메일 수신)
1024 사용안함  
1025 이상 클라이언트 측 송신포트로 사용함(랜덤부여)  

컴퓨터는 아파트, 애플리케이션은 주민A,B,C..., 포트번호는 아파트호수로 생각하면 쉽다.

e.g A씨(애플리케이션)에게 택배(데이터)를 보내려면 22호(목적지 포트번호)로 보내야 한다.

여기까지 하면 신뢰성 뿜뿜하는 연결형 통신이 완료된다.

 

하지만 위에 언급한 것처럼 동영상, 스트리밍 등에서 이렇게 많은 통신작업을 했다가는 버벅거리므로 비연결형 통신을 사용한다.

따라서 UDP를 사용하면

캡슐화(2장 참고)할 때 UDP헤더가 붙는다.

UDP헤더 + 데이터 = UDP데이터그램이라고 부른다.

 

상대방 확인 작업이 없다보니

LAN(근거리 네트워크, 1장 참고)내에 있는 모든 컴퓨터에 데이터를 일괄적으로 보내는 브로드캐스트(Broadcast)도 가능하다.

 


 

[복습하기]

 

1. TCP는 (연결)형 통신, UDP는 (비연결)형 통신

2. TCP헤더가 붙은 데이터를 부르는 명칭 세그먼트 UDP헤더가 붙은 데이터를 부르는 명칭 UDP데이터그램

3. 연결 확립을 위해 사용하는 코드비트 2가지 SYN, ACK

4. 연결 확립을 위해 세 번 통신 교환을 하는 것 3-way handshake

5. 연결 종료를 위해 사용하는 코드비트 2가지 FIN, ACK

6. 데이터를 재전송하는 것을 부르는 용어 재전송제어

7. 받은 세그먼트를 일시적으로 저장하는 장소 버퍼

8. 데이터가 넘치는 것 오버플로우(overflow)

9. 목적지가 어떤 애플리케이션인지 구분하려면 필요한 것 포트번호

10. 포트번호의 최소값과 최대값은 0, 65535 

 

* 답은 각 문제의 빈칸 또는 오른쪽 부분을 드래그

Comments