티스토리 뷰

웹 해킹/웹 공부

소켓(socket)이란

삼전동해커 2020. 7. 23. 21:55


소켓이란?


-소프트웨어로 작성된 추상적인 개념의 통신 접속점.

네트워크 응용 프로그램들은 특정 포트를 사용하고, 소켓을 통하여 서버와 데이터를 양방향 통신을 할 수 있다.


-응용프로그램에서 tcp/ip를 이용하는 입구 역할을 하며, 응용프로그램과 소켓 사이의 인터페이스 역할을 하고있다.


-서버는 포트를 열어놓고 클라이언트의 연결 요청을 리스닝(Listening)상태로 기다리고 있다.

 웹서버의 포트는 80포트이다. 그래서 웹서버는 항상 xx.xx.xx.xx:80이란 소켓을 열어놓고 대기중이다.


-클라이언트는 서버가 떠 있는 머신의 호스트네임과 서버가 리스닝하고 있는 포트 번호를 알고 있다. 

이 호스트네임과 포트번호를 이용해 서버와 연결을 시도한다.

또한 클라이언트는 서버 상대로 자신임을 알리기 위해 연결동안 사용될 로컬포트에 바인딩 된다.


-연결이 완료되면 연결된 포트말고 동일한 로컬포트를 하나 더 열어 리스닝 상태 대기한다.

 이는 연결된 클라이언트의 요청을 처리하면서 동시에 기존의 소켓을 통해서는 지속적으로 연결 요청을 받기 위함이다.


-클라이언트와 서버는 소켓에 데이터를 쓰거나 읽음으로써 통신을 할 수 있다.



소켓의 종류

스트림 소켓(tcp)

tcp를 사용하여 송수신.연결위주통신.신뢰성이 높음.

스트림 소켓은 양방향으로 바이트 스트림을 전송할 수 있는 연결 지향형 소켓으로 양쪽 어플리케이션이 모두 데이터를 주고 받을 수 있습니다.

오류 수정, 전송처리,흐름제어 등을 보장하며 송신된 순서에 따른 중복되지 않은 데이터를 수신하게 됩니다.


데이터그램(udp)

명시적으로 연결을 맺지 않고 비 연결형 송수신.데이터를 빠르게 전송하기 위해 사용.


클라이언트와 서버의 소켓 통신

서버

-socket()함수를 이용해 소켓 생성

-bind()함수로 ip와 포트번호를 설정

-listen()함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇개의 클라이언트와 연결할지 결정

-accept()함수를 사용해 클라이언트와 연결을 기다림



클라이언트

-socket()함수로 소켓을 연다.

-connect()함수로 통신 할 서버의 ip와 포트번호에 통신시도

-통신 시도 시, 서버가 accept()함수를 이용하여 클라이언트의 socket descriptor를 반환

-이를 통해 클라이언트와 서버가 서로 read(),write()를 하며 통신



http와 소켓의 차이

http는 클라이언트가 요청을 보낸 경우에만 서버가 응답하는 단방향 통신

서버로 부터 응답을 받은 후에 연결이 바로 종료

실시간이 아니라 필요한 경우에만 서버로 요청을 보냄


소켓은 서버와 클라이언트가 특정포트를 통해 연결이 성립되어 있어 실시간으로 양방향 통신을 하는 방식.

서버 또한 클라이언트로 요청을 보낼 수 있으며 카톡이나 실시간 중계같은 즉각적인 정보를 주고 받는 경우에 용이.

'웹 해킹 > 웹 공부' 카테고리의 다른 글

[php] $_SERVER함수  (0) 2020.07.31
정규표현식  (0) 2020.07.25
robots.txt란?  (0) 2020.07.23
구글 도크  (0) 2020.07.21
base 64 encoding.  (0) 2020.07.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함