1.연결지향이란 무엇일까?
네트워크에서 통신은 연결지향과 비연결지향 service로 나뉘어진다. 연결지향(혹은 연결지향 서비스)는 1:1 연결 상태를 유지하여 통신하는 것을 말한다. 연결지향이란 말은 데이터를 전송하는 측과 데이터를 전송받는 측에서 전용의 데이터 전송 선로를 만든다는 의미이다. 이때 만들어진 전송 선로를 Session이라고 한다. 데이터의 신뢰도가 중요하다고 판단될때 주로 사용된다고 한다.
2. 어디에 쓰일까?
TCP/IP 는connection-oriented 와 connectionless에 대해 알아볼때 가장 많이 나오는 네트워크 통신방식이다. 컴퓨터와 컴퓨터간의 통신을 위한 통신규약이다. 인터넷이 등장하면서 인터넷 서비스인 www , EMAIL, TELNET , FTP 등 대부분이 TCP/IP 기반에서 만들어져있다. 운영체제, 하드웨어, 접속매체에 관계없이 동작하기 때문이다. 그래서 인터넷 통신을 위한 핵심 프로토콜로 선택이 되었다.
3. 그럼 연결의 과정은?
연결지향의 반대인 브라우저와 서버는 서로 연결해서 데이터를 주고 받는다. 때문에 데이터의 전송 이전에 '연결'이라는 과정이 필요하다. 이때 연결은 물리적 연결이 아닌 논리적 연결이다. 한마디로 케이블이나 어떤 장치를 통해서 연결된게 아니라는 소리이다. 하지만 연결이 되었다면 두 호스트는 서로 데이터를 전송할 준비가 되었다는것을 보장한다.
간단히 요약하자면 이렇다.
- 클라이언트: 서버야 나 너랑 연결하고 싶은데 괜찮아?
- 서버: 난 괜찮은데 클라이언트야 너는 지금 연결해도 괜찮아?
- 클라이언트: 나도 괜찮아 그럼 연결하자
4. 3 way handshake
위에서 말한 간략한 요약과정을 3 way handshake라고 한다. 웹에서 많이 쓰는 방식인 TCP의 연결과정을 예로 들고싶다.
- 1). 먼저 클라이언트에서 서버에 Flag가 SYN인 요청을 보낸다. SYN은 Syncronize Sequence Number 의 약자이다. 요청을 보낼때 클라이언트에서 생성한 임의의 Sequence Number와 ACK번호를 서버로 보낸다.
- 2).서버에서 해당 요청을 받으면 서버는 Flag가 SYN이라는 것을 확인한다. 서버는 이 Flag값으로 연결요청을 하고 있다는 것을 알 수 있다. SYN는 동기화를 하기 위한 상태 요청이다. 그리고 컴퓨터는 Sequence Number 와 ACK번호를 사용하여 동기화를 한다. 요청을 수락하면 서버는 Flag에 SYN와 ACK를 같이 보내준다. 여기서 ACK는 응답에 대한 값이라고 생각하면 된다. 서버도 마찬가지로 자신의 임의의 Sequence Number를 설정하고 ACK에는 클라이언트에서 준 Sequence Number에 1을 더한 값을 담아 클라이언트에 보낸다.
-3). ACK는 클라이언가 요청한것에 대한 응답이다. ACK를 보고 서버도 자신에게 연결요청을 한다는것을 클라이언트 역시 알 수 있다. -2). 에서 했던것과 똑같이 ACK에 응답으로 온 Sequence Number +1을 한다. 하지만 Sequence Number는 최초로 보내는 것이 아니기 때문에 서버 응답시에 온 ACK 번호를 Sequence Number 에 담는다. 여기까지 거치면 3 way handShake가 완료가 된다. 이제 클라이언트는 서버에게 필요 요청을 하면 된다.
즉, 연결이 수립된 이후에 클라이언트는 요청을 또 보내는것이다. 이때는 SEQ 번호와 ACK번호가 그대로다. 이후에는 서버는 SEQ 번호에 ACK 번호를 넣게 된다. ACK에는 SEQ번호 +1 이 아닌 SEQ번호+ 데이터 크기가 된다. 연결 수립과 다르게 데이터(페이로드)가 있기 때문이다.
여담으로 SYN 와 ACK 번호를 계산해서 세션 하이재킹혹은 dos공격을 할 수 있다고 한다. 때문에 정보보안쪽에서는 중요한 부분이라고 한다. 만약에 다른 클라이언트가 3way handshake로 연결된 Sequence Number 와 ACK 번호 계산하여 가통신을 하게 된다면 기존 클라이언트 대신에 다른 클라이언트가 세션을 가로채서 통신을 시작하게 된다.
참고
[따라學IT] 09. 연결지향형 TCP 프로토콜 - TCP 3Way Handshake
https://www.youtube.com/watch?v=Ah4-MWISel8
TCP/IP와 handshaking
https://dawitblog.tistory.com/184
연결지향 프로토콜과 비연결 프로토콜의 차이점을 이해하라
https://simhyejin.github.io/2016/07/04/connectionoriented-connectionless/
네트워크 프로그래밍: TCP/IP 개론
https://www.joinc.co.kr/w/Site/Network_Programing/Documents/IntroTCPIP
'웹 > 네트워크 기본' 카테고리의 다른 글
TCP 와 UDP (0) | 2022.04.06 |
---|---|
IP란 무엇일까? - IP의 특징(2) (0) | 2022.03.30 |
IP란 무엇일까? - IP의 특징(1) (0) | 2022.03.20 |
네트워크의 구성 (0) | 2022.03.16 |
네트워크란? , 통신의 종류는? (0) | 2022.03.10 |